先搬出代码
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的值,判断地址值的比较,依然是相等.
网友评论