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

//常量和常量拼接在一起则结果再常量池,任何变量参与拼接结果则在堆里。

 

posted @ 2021-11-30 16:58  Boerk  阅读(128)  评论(0)    收藏  举报