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。

吐槽:

换位后蹲角落还以为会影响听课,今天上完课发现在这也能听得很清楚。问题不大。

县长来啦,鹅城太平啦;县长来啦,青天就有啦。

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1