java 对象赋值怎么不改变原来的对象的引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 对象赋值怎么不改变原来的对象的引用相关的知识,希望对你有一定的参考价值。

两个类 比如两个Integer i1,i2
i1 = new Integer(1);
i2 = new Integer(2);
现在 i1和i2 引用不同
现在想将i2 里的所有值赋给i1
使用 i1 = i2 后 , i1的引用 就变成i2的了,
怎么可以让i2 赋值 i1后 ,但是 i1 引用不变呢?

可以把变量设置成final,new 出来的新对象的变量是不可以改变的

首先你的new Integer(1)和new Integer(2)是生成2个内存块。而i1和i2是指向内存的引用。这时当你用i1=i2时。此时i1和i2都指定new Integer(2)了。感觉逻辑上感觉有点问题。如果非要这边做,可以在新定义一个引用i3,让先指向i1,即i3=i1.再进行i1=i2.这时。i3就是原来i1,为new Integer(1),而i1和i2为new Integer(2)
参考技术A 使用org.springframework.beans.BeanUtils.copyProperties(Object source, Object target, String[] ignoreProperties)直接把source对象的所有值复制给target对象,且不改变目标引用。应该是你想要的结果 参考技术B 用关键字final,它所修饰的类不能被继承,所修饰的方法不能被重写,所修饰的变量值不能被改变。 参考技术C 通过new创建出来的对象,他们的引用是不同的,但是赋值后,肯定就相同了。你那样想意义不大。 参考技术D 把变量声明成全局的..赋值直接 变量名= ?

以上是关于java 对象赋值怎么不改变原来的对象的引用的主要内容,如果未能解决你的问题,请参考以下文章

请问java中怎样将Integer类型的对象赋值给int

java对象引用测试

Python中的深浅拷贝,赋值及引用

JS学习之赋值与赋引用

深拷贝与浅拷贝

java中,只声明一个对象不赋值,与声明一个对象并赋为 null 的区别