String a = "123"; String b = "123"; a==b的结果是 true
String c = new String("123"); a==c的结果是false
String a="123";//会把字符串放到“字符串常量池”中, 此时 常量池中有 “123”,变量a指向常量池中“123”的地址。
String b="123";//JVM会先寻找常量池中是否有内容“123”,发现有之后,就把变量b指向常量池中的同一个地址。
因此,==比较的是地址,他们地址都是相同的,即都是字符串常量池中的地址。
String c= new String("123");//在堆中创建对象,地址指向变量c。 顺便(记得顺便两个字)检查常量池中是否存在内容“123”,如果不存在,则池中也保留一份。
因此,a==c是false,它们指向的是不同的地址,a的地址在常量池中,而c的地址在堆中。