String s = new String(“string”)在堆中创建了一个String对象,内容为”string”,在栈中创建了一个引用s,它指向堆中刚创建好的String对象。并且引用s值的改变不影响它所指的对象,只有通过它调用对象的方法对可能改变对象的内容。s = new String(“abc”);上面,只改变s的值,因此不会对内容为”string”对象造成影响(不考虑GC回收)。只不过是s指向堆中的新对象而已,从指针上来说,就是s的值改变了而已。