Bom dia Galera!!!
Na sexta feira deixei uma pergunta no fórum que ficou mal feita. A questão é a seguinte:
Tenho duas variáveis: A com o conteúdo ?x? e a variável B com o conteúdo 1 (isso uma com um numero inteiro e outra com um caracter)eu gostaria de trocar o conteúdo das variáveis sem ter que declarar uma terceira. Pra isso eu poderia armazenar o conteúdo de uma das variáveis na memória (swap). Com que comando eu poderia fazer isso?. Pode ser em qqr linguagem.
Melhorando pergunta: Troca de variáveis
8 Respostas
Kra… pelo menos q eu tenha visto isso n e possivel, pois vc tera de armazenar o conteudo d uma em algum lugar pra conseguir fazer a troca de variaveis!
Opa,
Cara… queria saber o porquê que vc não quer usar outra variável?? É algum desafio???
Opa,
Cara… queria saber o porquê que vc não quer usar outra variável?? É algum desafio???
é um desafio sim…
Usando a mesma idéia do mmpaulo naquele outro tópico:
class Troca
{
public static void main(String args[])
{
String a = "omega";
String b = "iota";
System.out.println("a: " + a + " e b: " + b);
a = a.concat(b);
System.out.println("a: " + a + " e b: " + b);
b = a.substring(0,a.length()-b.length());
a = a.substring(b.length(),a.length());
System.out.println("a: " + a + " e b: " + b);
}
}
Mas agora quem ficou com uma dúvida fui eu 
Nesse post:
http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&p=103292#103292
o jairelton fala que String é imutável.
Fui olhar a StringBuffer que ele citou e diz:
“A string buffer implements a mutable sequence of characters. A string buffer is like a String, but can be modified.”
E como pôde funcionar o que eu fiz no código acima se a String não pode ser modificada? Ou na verdade eu usei três novas posições de memória?
Em se tratando de objetos, as variáveis armazenam a posição de memória onde eles estão.
String s1 = "a";
s1 = "b";
A String “a” não foi modificada. s1 passou a referenciar (apontar para) a String “b”.
A variável muda, o objeto não.
Uma outra coisa que não costuma ficar clara:
public static final ArrayList list = new ArrayList(5);
O que é final é a variável list, não o ArrayList em si. Ele pode mudar, mas list não pode referenciar outro objeto.
Então quando eu faço:
a = a.concat(b);
Estou na verdade com 3 objetos String: “omega”, “iota” e “omegaiota”. Só que nesse momento não tem uma variável apontando para o “omega” já que o a passou a apontar para o “omegaiota”, certo?
2º. E quando o b passa a apontar para “omega” e o a passa a apontar para “iota” foram criados outros 2 objetos ou aqueles “omega” e “iota” existentes foram reaproveitados? Ou seja, no final do aplicativo eu estou com 3 objetos ocupando memória ou com 5?
thanks
System.out.println("a: " + a + " e b: " + b);
2- Se você não usar o construtor (new String() ), vão ser reaproveitados, sim.
Faz esse teste:String s1 = "oi";
String s2 = "oi";
System.out.println(s1 == s2);
String s3 = "ae";
String s4 = new String("ae");
System.out.println(s3 == s4);