当前位置: 首页 > news >正文

中国第四冶金建设有限公司官方网站杭州网站制作培训

中国第四冶金建设有限公司官方网站,杭州网站制作培训,做童装在哪个网站找客户,网站区分面试回答 在计算机内存中#xff0c;每个对象都有一个地址#xff0c;这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时#xff0c;实际上是将该对象的地址赋值给变量。因此#xff0c;如果我们将一个对象复制到另一个变量中国#xff0c;实际上是将对象…面试回答 在计算机内存中每个对象都有一个地址这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时实际上是将该对象的地址赋值给变量。因此如果我们将一个对象复制到另一个变量中国实际上是将对象的地址复制到了这个变量中。 浅拷贝是指将一个对象复制到另一个变量中但是只复制对象的地址而不是对象本身。也就是说原始对象和复制对象实际上是共享同一个内存地址的。因此如果我们修改了复制对象中的属性或元素原始对象中对应的属性或元素也会被修改。 在 java 中我们常用的各种 BeanUtils 基本也都是浅拷贝的。 深拷贝是指将一个对象及其所有子对象都复制到另一个变量中也就是说它会创建一个全新的对象并将原始对象中的所有属性或元素都复制到新的对象中。因此如果我们修改复制对象中的属性或者元素原始对象中对应的属性或元素不会受到影响。 知识扩展 BeanUtils 的浅拷贝 我们举个实际例子来看下为啥前面说 BeanUtils.copyProperties 的过程是浅拷贝。 先来定义两个类 Data public class Address {private String province;private String city;private String area; } Data NoArgsConstructor AllArgsConstructor public class User {private String name;private String password;private Address address; } 然后写一段测试代码 public static void main(String[] args) {User usernew User();user.setName(Tango);user.setPassword(123456);user.setAddress(new Address(anhui,hefei,shushan));User newUsernew User();BeanUtils.copyProperties(user,newUser);System.out.println(usernewUser);System.out.println(user.getAddress()newUser.getAddress());}以上代码输出结果为 false true 即我们 BeanUtils.copyProperties拷贝出来的 newUser 是一个新的对象但是其中的 address 对象和原来 user 中的 address 对象是同一个对象。 如果我们修改 newUser 中的 address 对象的值的话是会同时把 user对象中的 address 的值也修改了的。可以尝试着修改下 newUser 的 address 对象。 newUser.getAddress().setCity(beijing);System.out.println(JSON.toJSONString(user));System.out.println(JSON.toJSONString(newUser)); 输出结果 {address:{area:shushan,city:beijing,province:anhui},name:Tango,password:123456} {address:{area:shushan,city:beijing,province:anhui},name:Tango,password:123456} 实现深拷贝 如何实现深拷贝呢主要有以下几个方法 实现 Cloneable 接口重写 clone() 在 Object 类中定义了一个 clone 方法这个方法其实在不重写的情况下其实也是浅拷贝的。 如果想要实现深拷贝就需要重写 clone 方法而想要重写 clone 方法就必须实现 Cloneable否则会报 CloneNotSupportedException 异常。 将上诉代码修改下重写 clone 方法 Data NoArgsConstructor AllArgsConstructor public class Address implements Cloneable{private String province;private String city;private String area;Overridepublic Address clone() {try {Address clone (Address) super.clone();return clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}} }Data public class User implements Cloneable {private String name;private String password;private Address address;Overridepublic User clone() {try {User clone (User) super.clone();clone.setAddress(address.clone());return clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}} } 之后在执行一下下面的测试代码就可以发现这时候 newUser 中的 address 对象就是一个新的对象了。如果我们修改 newUser 中的 address 对象的值的话 user对象中的 address 的值是不会被修改的。 public static void main(String[] args) {User usernew User();user.setName(Tango);user.setPassword(123456);user.setAddress(new Address(anhui,hefei,shushan));User newUseruser.clone();System.out.println(usernewUser);System.out.println(user.getAddress()newUser.getAddress());newUser.getAddress().setCity(beijing);System.out.println(JSON.toJSONString(user));System.out.println(JSON.toJSONString(newUser));} 输出结果 false false {address:{area:shushan,city:hefei,province:anhui},name:Tango,password:123456} {address:{area:shushan,city:beijing,province:anhui},name:Tango,password:123456} 这种方式就能实现深拷贝但是问题是如果我们在 User 中有很多个对象那么 clone 方法就写的很长而且如果后面有修改在 User 中新增属性这个地方也要修改。 那么有没有什么办法可以不需要修改一劳永逸呢 序列化实现深拷贝 我们可以借助序列化来实现深拷贝。先把对象序列化成流再从流中反序列化成对象这样就一定是新的对象了。序列化的方式有很多比如我们可以使用各种 JSON 工具把对象序列化成 JSON 对象然后再从字符串中反序序列化成对象。 如果使用 fastjson 实现 User newUser JSON.parseObject(JSON.toJSONString(user),User.class); 也可以实现深拷贝。 除此之外还可以使用 org.springframework.util 中提供的 SerializationUtils 工具实现。 我们需要修改下上面的 User 和 Address 类使他们实现 Serializable接口否则是无法进行序列化的。 public class Address implements Serializable public class User implements Serializable 然后再需要拷贝的时候 User newUser (User) SerializationUtils.deserialize(SerializationUtils.serialize(user)); 同样也可以实现深拷贝啦~
http://www.ho-use.cn/article/10817153.html

相关文章:

  • 郑州做网站公司+卓美wordpress最大上传尺寸
  • 有那种网站么浙江建设
  • 怎么用wordpress建立自己的网站吗平果信息网
  • 邯郸网站设计公司抖音推广平台入口
  • 怎么在wordpress上设计网站表格网站源码
  • 如何把自己做的网站福州做网站优化
  • 罗湖做网站58网站搭建需要多少钱?
  • 网站建站华为云河南建设银行网站
  • 在中筹网站上做众筹枣强网站建设价格
  • 建设网站需要什么基础知识对网站建设的意见
  • 做vr网站女生适合学计算机的哪个专业
  • 高端网站设计建设建设银行网站未响应
  • 海安县城乡建设局网站适合设计师的网站编辑软件
  • 十大不收费的网站常州本地做网站的大公司
  • 自己造网站中国建设银行网站怎么登录不上去
  • 网站建设与网页设计心得体会单机多wordpress
  • 做家装模型的效果图网站建设钓鱼网站源码
  • 接网站开发项目如何在网站上做免费广告
  • 夜夜做新郎网站在线视频网站制作公司运作方案
  • 懂得做网站还可以做什么兼职平面设计职业学校
  • 如果做网站赚钱页面跳转中
  • 手机网站总是自动跳转php制作投票网站
  • 竞价网站模板建筑施工特种证书查询入口官网
  • 厦门网站建设厦门seo网站 组成
  • 怎样做一个免费的网站1999年怎样建立企业网站
  • 做网站图片多大WordPress功能文件
  • 西部数码网站管理助手破解版湖南电商网站建设
  • 昆山做网站好的wordpress 语录小程序
  • 如何做网站的信息分类优秀建筑设计案例
  • 网站开发是固定资产吗优秀网站建设服务