Pessoal o que acontece com esse código, pq o operador == verifica endereço de memória
certo? porém nesse código quando é feito o teste se s1 == s2 acaba entrando nessa condição
alguém pode me explicar esse código?
public static void main(String args[]) {
String s1 = "abc";
String s2 = "abc";
if(s1 == s2)
System.out.println(1);
else
System.out.println(2);
if(s1.equals(s2))
System.out.println(3);
else
System.out.println(4);
}
As Strings fazem parte de um pool de Strings para economizar memória.
Nesse caso veja que ele não entra no if.
public static void main(String args[]) {
String s1 = "abc";
String s2 = new String("abc");
if(s1 == s2)
System.out.println(1);
else
System.out.println(2);
if(s1.equals(s2))
System.out.println(3);
else
System.out.println(4);
}
O que vem a ser esse “pool de String”? :?: :?:
é uma maneira do java consumir menos recurso na criação de strings.
é uma forma do compilador/maquina virtual otimizar o uso de memoria.
se vc faz
String s1 = "oi";
String s2 = "oi";
As variaveis s1 e s2 apontam para a mesma referência de “oi”. Isto também acontece com Wrappers de inteiros até 127 se não me engano.
Se vc quer garantir que são objetos distintos use new:
String s1 = new String("oi");
String s2 = new String("oi");
Como String, Long, Integer, são objetos imutaveis, se eles apontam para o mesmo objeto ou não é “irrelevante”.
Estude o padrão Flyweight.