深拷贝 or 浅拷贝
浅拷贝:
- 属性是基本类型拷贝的是基本类型的“值”,属性是内存地址,拷贝的是内存地址。一个对象改变这个地址,会影响到另一个对象。
- String类型非常特殊,属于引用类型,但是String类型的数据是存放在常量池中,无法修改。
深拷贝:
- 深拷贝相当于创建一个新的对象。
————————————————————————————————————————
import org.apache.commons.beanutils.PropertyUtils;
StringUtils.copyProperties(A,B); // B赋A
import org.apache.commons.beanutils.BeanUtils;
BeanUtils.copyProperties(A,B); // B赋A
beanutils.PropertyUtils与beanutils.BeanUtils的不同(.copyProperties()方法)
- beanutils.BeanUtils提供类型转换,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,PropertyUtils不支持这个功能
- BeanUtils.copyProperties()可以在一定范围内进行类型转换,同时还要注意一些不能转换时候,会将默认null值转化成0;
- Property.copyProperties()则是严格的类型转化,必须类型和属性名完全一致才转化
beanutils.BeanUtils支持的类型转换
* java.lang.BigDecimal
* java.lang.BigInteger
* boolean and java.lang.Boolean
* byte and java.lang.Byte
* char and java.lang.Character
* java.lang.Class
* double and java.lang.Double
* float and java.lang.Float
* int and java.lang.Integer
* long and java.lang.Long
* short and java.lang.Short
* java.lang.String
* java.sql.Date
* java.sql.Time
* java.sql.Timestamp
import org.springframework.beans
BeanUtils.copyProperties(A,B);
// A赋B