String s1 = new String("1") + new String("1");//s1变量记录的地址为:new String
s1.intern();//在字符串常量池中生成"11"。如何理解:jdk6:创建了一个新的对象"11",也就有新的地址;jdk7:此时常量池中并没有创建"11",而是创建了一个指向堆空间中new String("11")的地址;
String s2 = "11";
System.out.println(s1 == s2);//jdk6:false;jdk7:true
Resuma o uso do método intern () em String:
Em jdk6:
Tente colocar esse pool de constantes de string no pool de constantes de string.
Se houver no pool constante, não haverá método. Retorna o endereço do objeto no pool constante existente;
Caso contrário, ele fará uma cópia desse objeto, colocará no string pool e retornará o endereço do objeto no string pool;
Em jdk7:
Tente colocar esse pool de constantes de string no pool de constantes de string.
Se houver no pool constante, ele não será colocado. Retorna o endereço do objeto no pool constante existente;
Caso contrário, ele irá copiar o endereço de referência do objeto, colocá-lo no pool constante e retornar o endereço de referência no pool constante;