DESKTOP-TEACTL5_20200828-曾越
问题总结:
public class StringMethodTestA {
public static void main(String[] args) {
//String s = "hello" ;
char[] data = { 'h' , 'e' , 'l' , 'l' , 'o' };
String x = new String( data );
String p=x.intern();
String s = "hello" ;
System.out.println( s == x );
System.out.println(p==s);
}
}
输出:
true
true
将String s = "hello" ;的位置修改到char数组的上一行后输出变成了:
false
true
原因:修改前,当执行String p=x.intern();时,字符串池中还没有hello对应的String实例,所以将x的String实例添加到字符串池中,返回该String实例的引用给p,此时堆中的String实例跟字符串池中的String实例的地址是一样的,到String s = "hello" ;时,hello已存在于字符串池中,所以将字符串池中该实例的地址返回给s,所以s==x输出为true。
修改后,首先创建hello对应的String实例并存放于字符串池中,返回该实例的地址给s,实例化x时,x指向堆中String实例的地址,故s==x输出为false,再运行到String p=x.intern();时,直接将字符串池中的hello对应的String实例地址给p。
吐槽:
换位后蹲角落还以为会影响听课,今天上完课发现在这也能听得很清楚。问题不大。
县长来啦,鹅城太平啦;县长来啦,青天就有啦。
点赞