回复 4楼 不落夕阳
不是你说的那样!
首先内存分四大块:1. 栈区2. 堆区3. 数据区4. 代码区
如果写: String str = "123";那么 “123”会保存在 数据区, 数据区一般存一些常量,这样写java会把“123”认为是常量 放入数据区。
如果写: String str = new String("123");那么这时的 “123”是放在堆中的
所以:
当写 ->
String str1 = "123"; String str2 = "123";
那么: str1 == str2 的结果是 true;这是因为,str1 的赋值过程中 会将“123”认为是一个常量,放入到数据区, 当str2赋值时, 在数据区找到了有一个“123”存在,这时就将这个“123”的引用给了 str2,也就是说: str1 和 str2 有相同引用。这样做的目的是为了 节省内存,
当写 -> String str1 == "123"; String str2 = new String("123");那么 str1 == str2 的结果是 false;