说明
其实这个问题,很多人都有提到过,但是在编程的路上,一些坑,自己没有踩过,永远不能理解,同样也会不记住。 如下端代码的赋值:
CommonSearch paramModel = new CommonSearch();
CommonSearch paramModel1 = paramModel ;
原理
对象是引用类型的,所以如果你把一个对象赋值给另一个变量,它实际上只是把内存地址赋值了,简单的讲,就是paramModel 或者paramModel 1的任何一个值被修改,其他值都会跟着修改。
场景
我需要保持paramModel 不变化,但是paramModel 中已存在一些数据,不想重新重新创建对象。就这么简单的赋值,然后发现自己想象中的数据不变化,全部都变了。所以BUG出现了。
解决方案
使用BeanUtils中的方法。 jar包 commons-beanutils-1.9.3.jar
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
import org.apache.commons.beanutils.BeanUtils;
...
//searchModel 是一个存在数值的CommonSearch 对象
CommonSearch paramModel = new CommonSearch();
BeanUtils.copyProperties(paramModel, searchModel);