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

java泛型是对范型参数类型的擦除

如果说同样大小的数组,Integer[] 要比 int[] 多占用 6 倍 内存。为什么在 Java 中想要一个包含整型值的 列表 List<int>,实际上得到的却是一个包含整型对象的列表 List<Integer>。

参考来源 1, 扩展阅读 12

扩展阅读

在Java中,int[] 和 Integer[] 在内存占用上的确存在显著差异。具体来说,对于相同大小的数组,Integer[] 通常会比 int[] 占用更多的内存。这是因为:

  • int[] :每个元素直接存储整数值,占用4个字节(32位系统上)。
  • Integer[] :每个元素都是一个 Integer 对象的引用,而每个 Integer 对象除了存储实际的整数值外,还包含了对象头和其他元数据。因此,每个 Integer 对象在堆上占用的内存远大于4个字节,具体取决于JVM的实现,但通常会比 int 大很多。

然而,当你尝试创建一个包含整型值的列表 List<int> 时,实际上得到的是 List<Integer>,这是由于Java的泛型机制和自动装箱/拆箱特性:

  1. 泛型限制 :Java的泛型不支持基本数据类型,只能使用对象类型。因此,List<int> 是非法的,编译器会报错。你需要使用 List<Integer> 来代替。
  2. 自动装箱/拆箱 :Java提供了自动装箱(将基本类型转换为对应的包装类型)和拆箱(将包装类型转换回基本类型)的功能。这意味着你可以像操作基本类型一样操作 List<Integer>,例如:1

    java

    List<Integer> list = new ArrayList<>();
    list.add(1); // 自动装箱,将 int 1 转换为 Integer 对象
    int value = list.get(0); // 自动拆箱,将 Integer 对象转换回 int
    

综上所述,虽然 Integer[] 比 int[] 占用更多内存,但在使用集合(如 List)时,必须使用 List<Integer> 而不是 List<int>,因为Java的泛型不支持基本数据类型。

相关文章:

  • 自然语言处理:文本规范化
  • GDidees CMS v3.9.1本地文件泄露漏洞(CVE-2023-27179)
  • MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序
  • 笔记二:整数和浮点数在内存中存储
  • 建模软件Blender与Blender GIS插件安装教程
  • spring-boot-starter和spring-boot-starter-web的关联
  • 如何搭建Web自动化测试框架?
  • MySQL 的索引类型有哪些?
  • SQLark 数据迁移|断点续迁已上线(Oracle-达梦)
  • 【JAVAEE】多线程
  • Day8、Vue3常见的几种API
  • MySQL保存超字段长度信息时如何正确截取
  • 【运维】SSH使用私钥打开隧道
  • 第一天vue学习
  • 《Effective Objective-C》阅读笔记(下)
  • staruml绘制时序图和用例图
  • 常用的AI文本大语言模型汇总
  • 【HarmonyOS Next】鸿蒙应用折叠屏设备适配方案
  • 基于face_recognition提取人脸嵌入向量进行人脸识别
  • 【Maui】系统找不到指定的文件Xamarin.Android.Aapt2.targets
  • 昆明网站建设公司乐网/青岛优化网站关键词
  • 杭州的网站建设/百度推广一天烧几千
  • 站外推广6种方法/每日新闻摘要30条
  • jsp网站开发登陆/百度热搜榜在哪里看
  • 软件界面设计ui培训班/怎样优化标题关键词
  • 做视频直播的网站/友情链接的形式