从 ArrayListint 报错这个现象出发,串联起 Java 基础

news/2025/12/6 9:57:22/文章来源:https://www.cnblogs.com/lf109/p/19314897

内容由AI生成

一、 泛型(Generics)与类型擦除

现象: 为什么写 ArrayList<int> 编译器会报错,必须写 ArrayList<Integer>

1. 核心考点:类型擦除 (Type Erasure)

  • 面试回答:
    Java 的泛型是伪泛型,是在编译器层面实现的。在编译后的字节码(.class文件)中,泛型信息会被擦除。
    • ArrayList<Integer>ArrayList<String> 在运行时,其实都是 ArrayList(底层数组是 Object[])。
    • 因为泛型在编译后会被替换为 Object(或者泛型边界类型),而 Java 的基本数据类型(如 int)不是 Object 的子类,无法放入 Object[] 数组中,所以泛型参数不支持基本类型。

2. 为什么不能用 int

  • 简单解释: 泛型要求包容的是对象引用,而 int 是原始数据,没有对象头,不能被当作 Object 处理。

二、 包装类(Wrapper Classes)

现象: 为了解决上面的问题,Java 提供了 Integer

1. 基本类型 vs 包装类 (int vs Integer)

这是高频对比题:

特性 int (基本类型) Integer (包装类)
本质 原始数值,直接存数据 是一个,存的是对象的引用
存储位置 通常在栈(Stack)中 对象实例在堆(Heap)中
默认值 0 null (这是大坑,容易引发 NPE)
泛型支持 不支持 支持

2. 为什么需要包装类?

  • 面试回答:
    1. 为了配合泛型使用(如集合类 List, Map)。
    2. Java 是面向对象的语言,基本类型不具备对象的特性(如没有方法可调用),包装类让基本类型也能像对象一样操作(如 Integer.parseInt())。
    3. 表示“缺失”状态int 无法表示“没有数据”,只能是 0;但 Integer 可以是 null(比如在数据库映射中,某字段为空)。

三、 装箱与拆箱 (Autoboxing & Unboxing)

现象: 虽然定义的是 ArrayList<Integer>,但我们可以直接写 list.add(10)

1. 原理(源码级)

  • 自动装箱 (int -> Integer):
    当你写 list.add(10) 时,编译器会自动将其转换为:
    list.add(Integer.valueOf(10))
  • 自动拆箱 (Integer -> int):
    当你写 int num = list.get(0) 时,编译器会自动将其转换为:
    list.get(0).intValue()

2. 面试大坑:NullPointerException (NPE)

  • 问题: 下面代码会报错吗?
    Integer a = null;
    int b = a; // 报错!
    
  • 原因: 自动拆箱会调用 a.intValue(),如果 anull,就会报空指针异常。
  • 场景: 在数据库查询返回 null,或者集合中存了 null 并尝试赋值给 int 变量时。

四、 进阶考点:整数缓存池 (Integer Cache)

现象: 这虽然跟 ArrayList 关系不大,但通常会紧接着包装类一起问。

1. 面试题:==equals 的区别

Integer a = 100;
Integer b = 100;
System.out.println(a == b); // trueInteger c = 200;
Integer d = 200;
System.out.println(c == d); // false (为什么?)

2. 原因解析

  • Integer.valueOf() 的缓存机制:
    在自动装箱调用 valueOf() 时,如果数字在 -128 到 127 之间,Java 会直接从缓存池(IntegerCache)中返回已经存在的对象引用,而不会 new 一个新对象。
    • 100 在范围内 -> 同一个对象 -> == 为 true。
    • 200 超出范围 -> 创建新对象 -> == 为 false。
  • 结论: 比较包装类对象的值,永远使用 equals(),不要用 ==

五、 性能与替代方案 (加分项)

现象: 既然 ArrayList<Integer> 这么方便,为什么还要在乎它底层的 int

1. 性能损耗

  • 内存占用: Integer 对象包含对象头等元数据,比纯粹的 int(4字节)占用内存大得多。
  • CPU 损耗: 大量的自动装箱和拆箱操作会消耗 CPU 资源,且产生大量临时对象,增加 GC(垃圾回收)压力。

2. 替代方案(体现技术深度)

  • 如果真的需要存储大量 int 且对性能敏感,可以使用:
    • 数组: int[](最快,但长度不可变)。
    • Java 8 Stream API: IntStream(专门处理 int 的流,避免装箱)。
    • 第三方库: 如 FastUtil 或 Eclipse Collections,它们提供了 IntArrayList 这样的特定类,底层直接用 int[] 存储,避免了泛型擦除和装箱带来的开销。

总结(面试速记版)

  1. 为什么泛型不能用 int? -> 泛型擦除后是 Object,int 无法转为 Object。
  2. 什么是装箱/拆箱? -> 编译器自动在 intInteger 间转换,底层调用 valueOf()intValue()
  3. 有什么风险? -> 拆箱时如果对象为 null 会报空指针异常 (NPE)。
  4. Integer a = 100, b = 100, a==b? -> True,因为 -128~127 走了缓存池。
  5. Integer c = 200, d = 200, c==d? -> False,超出缓存范围,创建了新对象。
  6. 最佳实践? -> 包装类比较值一定要用 .equals()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/989820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年质量好的拖拉机圆盘耙厂家推荐及选择参考

2025年质量好的拖拉机圆盘耙厂家推荐及选择参考行业背景与市场趋势随着全球农业机械化水平的不断提升,拖拉机配套农机具市场呈现出稳定增长态势。圆盘耙作为重要的土壤耕作设备,在农业作业中扮演着关键角色。据行业数…

2026 北京离婚财产律师推荐名单:靠谱机构 VS 精品律所,公正评价性价比之选

在朝阳、海淀、东城、西城等北京核心区县,离婚财产分割暗藏诸多 “地域专属陷阱”:朝阳涉及跨境房产的复杂权属查询与涉外股权的精准界定,海淀围绕学区房的动态增值计算,东城关乎胡同平房的特殊产权划分,西城涉及…

2025年知名的耐铬酸涂层厂家最新实力排行

2025年知名的耐铬酸涂层厂家实力排行行业背景与市场趋势随着工业技术的不断进步,耐铬酸涂层在化工、电镀、冶金等领域的应用日益广泛。铬酸作为一种强氧化剂,对金属设备具有极强的腐蚀性,传统防护材料难以长期抵御其…

2025年度哈尔滨新能源汽车升级服务企业推荐:比较不错的新能

TOP1 推荐:哈尔滨市南岗区中威车饰旗舰店 推荐指数:★★★★★ 口碑评分:哈尔滨车主评价极高的新能源汽车升级企业 专业能力:中威车饰作为哈尔滨本地标杆新能源汽车升级企业,深耕汽车用品服务二十载,聚焦新能源汽…

2026 北京擅长打离婚官司的律所排名:5 家靠谱机构解析,高胜诉率诉讼方案推荐

在朝阳、海淀、东城、西城等北京核心区县,打离婚官司常面临 “地域专属挑战”:朝阳法院的复杂财产分割诉讼(如跨境股权、多套房产争议)、海淀法院的抚养权精细化庭审(需匹配学区资源、亲子陪伴证据)、东城法院的…

2025年热门的食品级转子泵厂家最新实力排行

2025年热门的食品级转子泵厂家实力排行行业背景与市场趋势随着食品饮料行业的快速发展,食品级转子泵作为关键输送设备,其市场需求持续增长。2025年,全球食品级转子泵市场规模预计将达到45亿美元,年复合增长率保持在…

2025年度上海圆锯机品牌排名:宏萌圆锯机的交货期长吗?

在工业制造领域,圆锯机作为金属加工的核心设备,其性能直接影响企业的生产效率、成本控制与产品质量。面对市场上琳琅满目的圆锯机品牌,企业往往困惑于如何选择——设备交货期是否可控?工作效率能否匹配产能需求?创…

2026年河北石家庄赵县农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活

2026年河北石家庄赵县农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活 一、引言:建房是一辈子的事,选对伙伴比省钱更重要 “赵县农村建房找哪家靠谱?”——这是赵州镇、范庄镇、北王里镇等9镇2乡的…

惠州惠算GEO:自研AI搜索优化,多平台覆盖,转化快本地服务

在当今数字化时代,企业面临着激烈的市场竞争,如何在 AI 搜索中提升品牌的引用率和转化率,成为众多企业亟待解决的难题。尤其是中小企业,既希望获得全面的推广服务,又担心成本过高、效果不佳。同时,市场上的推广工…

2025年评价高的伺服减速器/齿轮减速器用户口碑最好的厂家榜

2025年评价高的伺服减速器/齿轮减速器用户口碑的厂家榜行业背景与市场趋势随着工业自动化水平的不断提升和智能制造需求的持续增长,伺服减速器和齿轮减速器作为关键传动部件,在机器人、数控机床、包装机械、物流设备…

想在赵县老家盖房子,靠谱的自建房公司口碑推荐。河北石家庄赵县自建房公司/机构权威测评推荐排行榜。

想在赵县老家盖房子,靠谱的自建房公司口碑推荐。河北石家庄赵县自建房公司/机构权威测评推荐排行榜。 一、引言 十年前,赵县农村盖房还停留在“找本村工匠、画简易草图”的粗放模式。从洨河沿岸平原的砖瓦房,到南部…

2025年质量好的商业动画制作/工业产品动画制作高评分推荐榜单

2025年质量好的商业动画制作/工业产品动画制作高评分推荐榜单行业背景与市场趋势随着数字经济的蓬勃发展,商业动画和工业产品动画已成为企业营销传播的重要工具。2024年全球动画市场规模已突破4000亿美元,预计到2025…

2026年河北衡水景县农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活

2026年河北衡水景县农村自建房推荐榜,图南建房宝领衔 六家实力公司赋能乡村宜居生活 一、引言:景县建房选对伙伴,让宜居梦想扎根乡土 "衡水景县农村建房,找哪家公司靠谱?"——这是当前景州大地上无数准…

一款基于 .NET WinForm 开源、轻量且功能强大的节点编辑器,采用纯 GDI+ 绘制无任何依赖库仅仅100+Kb - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

wps窗口置顶的方法

wps窗口置顶的方法方法一:利用WPS自身的功能 首先,打开您的WPS文档。在文档的选项卡上,右键点击选择“作为独立窗口显示”。这样,您的WPS文档就会从主界面中独立出来,成为一个单独的窗口。 接下来,在独立出来的窗…

小视频源码,关于鉴权你了解多少? - 云豹科技

小视频源码,关于鉴权你了解多少?使用session/cookiecookie.jsconst http = require(http); // 一般需要存到数据库里 const session = {} http.createServer((req, res) => {if (req.url === ./favicon.ico) {res…

2025年靠谱的耐盐雾型MMA彩色防滑路面‌/薄层喷涂MMA彩色防滑路面厂家最新权威实力榜

2025年靠谱的耐盐雾型MMA彩色防滑路面/薄层喷涂MMA彩色防滑路面厂家权威实力榜行业背景与市场趋势随着城市化进程加速和基础设施建设的持续投入,彩色防滑路面作为一种兼具功能性与美观性的新型路面材料,正受到越来越…

想在景县老家农村盖房子,靠谱的自建房公司口碑推荐。河北省衡水市景县自建房公司/机构权威测评推荐排行榜。

想在景县老家农村盖房子,靠谱的自建房公司口碑推荐。河北省衡水市景县自建房公司/机构权威测评推荐排行榜。 一、引言 十年前,景县农村盖房还停留在“找本村工匠、画简易草图”的粗放模式。从大运河沿岸的砖木房,到…

2025年知名的双向犁厂家最新TOP排行榜

2025年知名的双向犁厂家TOP排行榜行业背景与市场趋势随着全球农业机械化程度的不断提高,双向犁作为耕作机械中的重要组成部分,市场需求持续增长。2025年,双向犁行业呈现出几个显著趋势:,智能化、自动化技术逐渐应…

故城县农村自建房找谁好?河北省衡水市故城县自建房公司/机构深度评测口碑推荐榜

故城县农村自建房找谁好?河北省衡水市故城县自建房公司/机构深度评测口碑推荐榜 一、引言:故城县农村自建房的“品质升级需求” 过去,故城县农村自建房多是“邻里帮工+经验施工”的模式:村里的施工队凭着多年经验画…