Quem poderia tirar uma duvida minha.
Se eu tenho as segiuntes linhas no meu codigo java.
String a = new String(); //Criei uma nova instacia.
a = "Test"; //Valorizo
String b = "Test"; // E' criada uma nova instacia?
Qual a diferença entre criar uma String criando uma nova instacia depois valorizando-a e (String a) criar uma String valorizando-a diretamente sem dar o new (String b)?
Sei q é uma pergunta basica, mas isso ta me fazendo quebrar a cabeça.
Significa que elas vao estar apontando para o mesmo espaço de memoria? Ou seja, nesse caso tb serao “iguais”?
O valor nesses casos n tem importancia, certo?
Significa que elas vao estar apontando para o mesmo espaço de memoria? Ou seja, nesse caso tb serao “iguais”?
O valor nesses casos n tem importancia, certo?[/quote]
Claro que tem, elas só apontam pro mesmo espaço se tiverem o conteúdo igual.
a está apontando pra um espaço e b para outro, pois ABC != FGH.
Se vc criasse um String c = “ABC” então a e c apontariam pro mesmo espaço.
Pelo oq eu entendi entao elas serao iguais se tiverem um conteudo igual e se eu n tiver usado em nenhum dos dois casos o New.[/quote]
Sim. O que ocorre na verdade quando você faz
String a = "ABC";
é a criação de uma string de forma literal e neste caso, quando se criam strings dessa forma, elas vão para um pool de Strings. Caso você declare uma nova variável da seguinte forma
String b = "ABC";
a JVM procura no pool de strings para ver se já existe uma string igual e, caso exista, faz sua variável apontar para o mesmo endereço de memória. Por este motivo, quando vc testa a igualdade das variáveis a e b através do “==”, ela retorna true.
Mas, se vc criar strings assim
String b = new String("ABC");
você está criando um novo objeto em memória e se testar a igualdade das variáveis a e b com “==”, ela retornará false, pois não apontam para o mesmo lugar na memória…