因为在Java中String类被设计成不可改变的类,所以String类的所有对象都是不可变的。第一句代码中,s1(存储在栈区)引用了堆中的一个内存区域(记为a1),a1堆内存区域存储的内容是“Hello”。执行第二句代码后,s不在引用a1区域,而是重新引用了堆中的另外内存区域(记为a2),且a2中的内容是“Hello world”。s并没有对原始的a1堆内存中的内容进行改变,而是重新指向了新的堆内存区域。
因为在Java中String类被设计成不可改变的类,所以String类的所有对象都是不可变的。第一句代码中,s1(存储在栈区)引用了堆中的一个内存区域(记为a1),a1堆内存区域存储的内容是“Hello”。执行第二句代码后,s不在引用a1区域,而是重新引用了堆中的另外内存区域(记为a2),且a2中的内容是“Hello world”。s并没有对原始的a1堆内存中的内容进行改变,而是重新指向了新的堆内存区域。