第1个回答 2012-07-23
Java对常量在内存中相同对象会合并,因为常量不会改变,多份引用指向同一份数据可以节省内存。
这是在编译源程序时分析和处理的。
c=x+y实际是用x和y的值又新创建了一个字符串对象,这是在程序运行时发生的,你的例子中c内容只是恰好和a、b相同,若也进行常量合并则势必要在内存中进行搜索匹配,得不偿失。所以实际c的值不会借用a、b的值。
第2个回答 2012-07-23
这里用到Java里面是一个常量池的问题。对于x+y操作,其实是在堆里面重新创建了一个新的对象,c保存的是这个新对象在堆空间的的内容,所以c与a的值是不相等的。而当调用c.intern()方法,却可以返回c在常量池中的地址值,因为a的值存储在常量池中,故c.intern和a的值相等。本回答被网友采纳
第3个回答 2012-07-23
String对象是不可变的对象,所以x是一个对象,y是一个对象,c=x+y就是另一个对象,而a和b使用的是相同的内存地址,因此他们是相同的
第4个回答 2012-07-23
c是变量x的地址断开后再连接上的