BeanUtils.copyProperties 与implements Cloneable 详细使用说明

1、BeanUtils.copyProperties是浅拷贝

              浅拷贝的危险性在于针对引用变量使用的是赋予的方式而不是复制,这就代表String、Integer、Boolean 这些包装类的属性使用copyProperties后赋予了新的变量,当修改新变量的这些属性的值的时候,旧变量的这些属性值也同时改变。

                因此在使用copyProperties(Object source,Object target) 就需要考虑这两个变量是否还需要进行运算赋值,如果需要那就要考虑两个变量是否可以进行同步。

2、实现Cloneabe并重写clone()方法是深拷贝

                重写clone()后, p1=p.clone() 将p的属性深拷贝到p1。深拷贝也就代表String这些引用对象在p1是在新开辟的空间存放相同的值,而不是p1使用p的引用,这样无论怎么修改p1都不会影响到p的属性。

3、BeanUtils.copyProperties 常用的包是Spring 与apache,建议使用Spring

 a. Spring包的copyProperties 效率远强于apache

 

//apache
package org.apache.commons.beanutils;

        apache 的beantutils 对于对象拷贝加了很多的检验,包括类型的转换,还会检验对象所属的类的可访问性,这样复杂的检验方式导致apche的beanUtils的效率底下,甚至IDEA都会报警。

//Spring
package org.Springframework.beans;

        Spring 的只会检验对象属性的可访问性,然后直接赋值

b.Spring包与apche包在转化上的区别

   在null值上的转化区别:

        spring只会针对非null 值的属性进行转化,对于null值则直接跳过

        apache则会对null进行转化

   相同名称的属性但是不同类型:

        当相同名字的属性但是类型不同的时候,两包都会对类型进行转化,但是这个类型相当于强转,先将String转为Object 然后再转为Long 。但是apache经常报错的就是Date类型的转化上,牵扯到null 的判定,并且java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的,所以Date的使用上也要思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值