Esquece ponteiro em Java. Vc não tem acesso a eles. Por isso que chama de referencia e não ponteiro.
String s = new String("asfasdf");
s é uma referencia que guarda um endereco de memoria onde o objeto está alocado.
É IMPOSSÍVEL saber qualquer coisa sobre essa referencia ou fazer qualquer coisa com ela.
Vc só sabe que ela existe.
Então quando vc faz:
String s1 = new String("asdfasdf");
String s2 = s1;
Vc copiou a referencia s1 em cima de s2, ou seja, agora ambos s1 e s2 apontam para o mesmo objeto em memória.
Diferente de:
String s1 = new String("a");
String s2 = new String("a");
São dois objetos em dois enderecos diferentes em memória. Mas eles são iguais do ponto de vista lógico.
Em C vc pode manipular os ponteiros, assim:
String s1 = new String("a");
s1++; // incrementa o endereco na memória... agora quando vc for acessar esse endereco o programa vai muito provavelmente explodir.
PS: Depois dessa explicacao ninja, se não entendeu se mata. :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
Por isso que:
String s1 = new String("asdfasdf");
String s2 = s1;
System.out.println(s1 == s2); // => true
System.out.println(s1.equals(s2)); // => true
String s1 = new String("a");
String s2 = new String("a");
System.out.println(s1 == s2); // => false
System.out.println(s1.equals(s2)); // => true
String s1 = "a";
String s2 = "a";
System.out.println(s1 == s2); // => true por causa do pool de Strings da JVM