list中存进去的对象是否等于取出来的新命名的对象(地址值)

2020-05-21  本文已影响0人  粽十三丶

先搬出代码

public static void main(String[]args){

    String str1 = "123";

    List<String> list = new ArrayList<>();

    list.add(str1);

    String str2 = list.get(0);

    System.out.println(str1==str2);

}

打印str1和str2的比较,结果是相等,控制台输出true

琢磨了一番,大概是如下面几个步骤

首先String str1 = "123";

这一步,会把"123"这个值,被写入jvm内存中的常量池中,同时给一个地址值让str1指向它

然后list.add(str1);

这步操作,在list数组中,存入的也仍然是"123"的地址值,如果add方法后,修改了str1的值,实际list中的对象并不会受到影响

最后String str2 = list.get(0);

从list中取出来的值,实际结果还是字符串"123"的地址值引用,所以最后str1==str2的值,判断地址值的比较,依然是相等.

上一篇下一篇

猜你喜欢

热点阅读