没有。 name = name+"abc"; 只是改变了指针指向的内存而已,原来指向的内存的内容并没有变化。
这样p.name的值没有改变; String name = p.name ;//是将p对象中的属性name在内存中的空间地址引用给了name这个变量 name = name + "abc";//name所指向的p.name的地址空间的值加上"abc"指向的栈内存中的值,得到一个新的栈内存中值,也就是系统开辟了一个新的空间存储计算的这个值,然后将新的值的地址空间引用给了name变量,所以程序结果:name指向了新值,而p.name还是指向原来的空间值.
对的,你要知道,String虽然是传引用,但是Java的String是不变的,所会说 你一旦 String s = p.name + "abc",就得形成一个新的String,然后s指向这个新的String,以前的p.name还在那里,但是你如果用StringBuffer这样可变的对象代替String就会变化了
http://www.javaeye.com/topic/12961
name = name+"abc"; 只是改变了指针指向的内存而已,原来指向的内存的内容并没有变化。
String name = p.name ;//是将p对象中的属性name在内存中的空间地址引用给了name这个变量
name = name + "abc";//name所指向的p.name的地址空间的值加上"abc"指向的栈内存中的值,得到一个新的栈内存中值,也就是系统开辟了一个新的空间存储计算的这个值,然后将新的值的地址空间引用给了name变量,所以程序结果:name指向了新值,而p.name还是指向原来的空间值.
对的,你要知道,String虽然是传引用,但是Java的String是不变的,所会说
你一旦
String s = p.name + "abc",就得形成一个新的String,然后s指向这个新的String,以前的p.name还在那里,但是你如果用StringBuffer这样可变的对象代替String就会变化了
String 和 StringBuffer实际上都是操作char数组的,String类中定义的char数组是final型的,而StringBuffer中定义的char数组不是final型的,所以String中的值一旦赋值之后是不能修改的,而StringBuffer可以多次修改值。