String
String s1 = "abc";
String s2 = "abc";
System.out.printIn(s1==s2);
true.
//常量池中不会存储连个想用的字符串,所以s1和s2都指向了常量池中相同的字符串,所以有相同的地址。
String s3 = new String("abc");
System.out.printIn(s1==s3);
false.
//栈中的s3指向堆中的values,然后指向常量池中的字符串,所以s3地址是堆的地址。
Person p1 = new Person(Tom);
Person p2 = new Person(Tom);
System.out.printIn(p1.name==p2.name);
true.
//栈中的p1和p2,指向堆中不同的name变量,name变量指向常量池
String s1 ="a";
String s2 ="b";
String s3 ="ab";
String s4 =s1+"b";
String s5 ="a"+s2;
String s6 =s1+s2;
System.out.println(s1+s2==s3);//false
System.out.println("a"+"b"==s3);//true
//常量和常量拼接在一起则结果再常量池,任何变量参与拼接结果则在堆里。

浙公网安备 33010602011771号