Problemas com sinal de igualdade

Olá pessoal,
Estou em dúvida em porquê, quando uma comparação com String com == é verdadeira ou falsa.

Exemplo:

public class Teste{

  public static void main(String[] args){
       String x = "Portal Java";
       System.out.println(InnerTeste.x1 == x);
  }

}

class InnerTeste{
      static String x1 = "Portal Java";
}

Porque a resposta é true.

porque voce esta retornando um resultado de comparação entre as variáveis, e nao atualizando uma variavel. por exemplo:

x = 1

z = {x = 1} && Leia assim, ignore a sintaxe.

é diferente de z = {x + 1}

o tipo de variavel que e o z vai mudar de acordo com a sintaxe escolhida.

em clipper ficaria assim:

? 1 = 1
.T.

ou ? 1 + 2
3

Retorna true porque você está verificando duas Strings no pool, ou seja, irá ser verificado se as duas são iguais.

Mas se você fizer assim:


String a  = new String("a");
String b  = new String("a");

   if (a == b) { 
     System.out.println("Sim");
   } else {
     System.out.println("Não");
 }

A resposta é Não, porque eu criei dois objetos Strings e nesse momento não estão apontando para a mesma referência na memória.

Porém se eu fizer assim:


String a  = new String("a");
String b  = a;

   if (a == b) { 
     System.out.println("Sim");
   } else {
     System.out.println("Não");
 }

A resposta é Sim porque as duas variáveis de referência (a e b) estão apontando para o mesmo valor na memória.

Valeu :razz: