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

智慧团建网站登录电脑版wordpress 做影视站

智慧团建网站登录电脑版,wordpress 做影视站,做网站如何更新百度快照,宁波网络建站公司有哪些Java 列表复制与对象引用 一、知识点 1. 对象引用的基本概念 在 Java 中&#xff0c;List<School> 这样的集合存储的并不是真正的对象&#xff0c;而是对象的“地址”&#xff08;引用&#xff09;。就好比你有一个文件柜&#xff0c;文件柜里放的不是文件本身&#x…

Java 列表复制与对象引用

一、知识点

1. 对象引用的基本概念

在 Java 中,List<School> 这样的集合存储的并不是真正的对象,而是对象的“地址”(引用)。就好比你有一个文件柜,文件柜里放的不是文件本身,而是指向文件存放位置的标签。集合中的每个元素都指向堆内存中的实际对象实例。

2. 列表复制与对象引用

当你用 new ArrayList<>(schools) 复制一个列表时,新列表(比如 sortedSchools)只是把原列表(schools)中对象的“地址”复制了一遍,而不是复制对象本身。也就是说,两个列表中的元素都指向同一个对象实例,就像两个标签指向同一个文件。

3. 对象属性修改的影响

因为两个列表中的元素指向同一个对象,所以当你修改复制后的列表(sortedSchools)中对象的属性时,原列表(schools)中对应的对象属性也会跟着变。就好比你通过一个标签修改了文件内容,另一个标签指向的文件内容也会变。

4. 避免原列表被修改的方法

如果你希望修改复制后的列表时不影响原列表,可以在复制列表时创建新的对象,而不是直接复制引用。比如用构造函数重新创建对象:

List<School> sortedSchools = new ArrayList<>();
for (School school : schools) {sortedSchools.add(new School(school.abbreviation, school.totalStudents));
}

这种方法虽然能避免原列表被修改,但会增加内存开销(因为要创建新的对象实例)和处理时间(因为要调用构造函数)。


二、面试题

1. 基础概念题

题目:请解释在 Java 中 List<School> 存储的是 School 对象还是对象的引用?并说明当使用 new ArrayList<>(schools) 复制列表时会发生什么?

答案List<School> 存储的是 School 对象的引用,而不是对象本身。就好比你有一个文件柜,文件柜里放的是指向文件的标签,而不是文件本身。当使用 new ArrayList<>(schools) 复制列表时,新列表只是复制了原列表中对象的引用(标签),而不是创建新的对象实例。也就是说,新列表和原列表中的元素都指向堆内存中同一个对象。

2. 代码分析题

题目:以下是一段 Java 代码,请分析代码的输出结果,并解释原因。

import java.util.ArrayList;
import java.util.List;class School {String abbreviation;int totalStudents;int unassignedStudents;int supervisors;public School(String abbreviation, int totalStudents) {this.abbreviation = abbreviation;this.totalStudents = totalStudents;this.unassignedStudents = totalStudents;this.supervisors = 0;}
}public class Main {public static void main(String[] args) {List<School> schools = new ArrayList<>();School school1 = new School("ABC", 100);schools.add(school1);List<School> sortedSchools = new ArrayList<>(schools);for (School school : sortedSchools) {if (school.unassignedStudents > 0) {school.unassignedStudents -= 20;school.supervisors++;}}System.out.println("原列表 schools 中学校的未分配学生数: " + schools.get(0).unassignedStudents);}
}

答案:输出结果是 原列表 schools 中学校的未分配学生数: 80。原因如下:

  • sortedSchools 是通过 new ArrayList<>(schools) 复制的,它只是复制了 schools 中对象的引用,而不是创建新的对象实例。
  • sortedSchools 中修改对象的属性(比如 unassignedStudentssupervisors),因为引用的是同一个对象,所以 schools 中对应的对象属性也会被修改。因此,schools.get(0).unassignedStudents 的值会从 100 变为 80。
3. 优化策略题

题目:如果希望在上述代码中,对 sortedSchools 中 School 对象属性的修改不影响 schools 列表,应该如何修改代码?请说明这种修改的优缺点。

答案

  • 修改方法:在复制列表时创建新的 School 对象,而不是直接复制引用。修改后的代码如下:
    List<School> sortedSchools = new ArrayList<>();
    for (School school : schools) {sortedSchools.add(new School(school.abbreviation, school.totalStudents));
    }
    
  • 优点:这样可以保证原列表 schools 不会被 sortedSchools 的操作所影响,数据的独立性更好。就像你复制了一份文件,修改副本不会影响原始文件。
  • 缺点:会增加内存开销(因为需要创建新的对象实例),同时也会增加处理时间(因为每次复制都要调用构造函数来创建新对象)。
http://www.dtcms.com/wzjs/783982.html

相关文章:

  • 成都58手机微信网站建设名录网站建设主要做什么
  • 岳西县建设局网站常州工程交易网
  • 漳州网站建设去博大a优大流量网站解决访问量
  • 如何经营一个购物网站聊城做网站公司信息
  • 网站建设的项目计划h5制作开发价目表
  • 广州天河做网站网页设计与制作教程题
  • 深圳网站建设51duoshiwordpress怎样优化3
  • 网站开发自荐信湘潭网站建设 诚信磐石网络
  • 虚拟机做门户网站如何绑定域名网络热词2022
  • 网站托管服务公司注册卡wordpress
  • 青岛高端网站制作公司安徽餐饮加盟网站建设
  • asp网站做seowordpress 搜索分页
  • 有没有做链接的网站吗网站暂停怎么做
  • 宿松县住房和城乡建设局网站郑州安卓app开发
  • 明会红网站企业员工信息管理系统
  • 做个简单的导航网站如何给网站做优化代码
  • 建站广告赚钱wordpress自动发布模块
  • 高效网站建设咨询深圳网站建_企业网站设计定制
  • 做品牌的人常用的网站返利网网站建设
  • 龙岩网站设计一般要多久arvixe如何做网站
  • 西宁网站建设官网十大博物馆展陈设计公司
  • 网站制作佛山淘宝内部优惠券网站怎样做的
  • 佛山网站建设专业现状聚财的公司名字大全
  • android网站客户端开发抖音代运营电话话术
  • 网站服务器安全部署深圳筑造建设有限公司网站
  • 福田区住房和建设局官方网站营销公司
  • 中山市建设局安全监督站网站网络运维和网站开发
  • 做网站 赚广告费电子商务网站开发意义
  • 免费网站重生做军嫂软件库破解版软件合集
  • 郑州网站推广哪家专业网站iis7.5配置