java的问题
java的问题a=b;//a,b是同一种类型的引用b=a+b;为什么第二行的a的内容还是a的内容,而不是b的内容,它里面存的不应该是b的地址值了吗,指向b的对象才对啊??...
java的问题a=b; //a,b是同一种类型的引用
b=a+b;
为什么第二行的a的内容还是a的内容,而不是b的内容,它里面存的不应该是b的地址值了吗,指向b的对象才对啊?? 展开
b=a+b;
为什么第二行的a的内容还是a的内容,而不是b的内容,它里面存的不应该是b的地址值了吗,指向b的对象才对啊?? 展开
2个回答
展开全部
a=b将使a,b的引用值相同,他们将分别指向在堆栈中的同一对象,必须明确的是a并不是指向的b,而是指向b所指向的对象。
b=a+b使b的引用值发生变化,但a的引用值并未进行修改,指向的还是先前的对象。
要点:
1、改变引用值并不会改变引用值所指向的对象。
2、改变对象,变化将体现在所有指向他的引用上。
3、对于类似String,Integer等这样的特殊类,即内部数据已经被final关键字修饰,将无法从内部改变他的值。
因此
String a = new String("aaa");
String b = a;
当你要裁剪一个字符串,使用a.subString()是无法改变a指向对象的值的,作为替代它会产生一个返回值,返回值将生成一个新的字符串对象的引用。
a = a.subString() 正确,a的引用发生变化,但b却没有
所以a和b将不再指向同一对象。
4、基本类型类似3中的情况,底层有较大区别,但表层可以按3中的描述理解。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询