关于String对象在内存中的存活 (与其他问题不同)
首先感谢进来看的朋友!谢谢你们抽出时间来看我的问题!
String str1 = "hello";
String str2 = new String("hello");
print(str1 == str2)//返回false
上面这个返回false很必然,因为一个指向常量池 一个指向堆中的对象。但我的问题来了:
我想弄明白new出来的String是怎么找到自己的"hello"的,是在堆中有一份拷贝?还是说,自己的对象里有一个引用指向常量池中的"hello"?那么这个"hello"会不会重新建一个空间存放呢?还是说和str1指的是同一个?
看个例子:
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
到这里 内存中是不是这样:
常量池中只有一个"hello"
栈中有4个引用 分别是str1 str2 str3 str4
堆中有两个String类的对象 str3和str4分别指向
还是那个问题 str3和str4中的数据 是在哪?指向常量池?还是自己的对象中有拷贝?
------解决方案--------------------去看String类的构造方法
pubilc String(String orig)
的代码就明白了
------解决方案--------------------string 对象的理解进行时,你看看,对你会有帮助。