如何准确区分 Integer.valueOf() 与 new Integer() 在对象创建与缓存池利用上的具体差异?

2026-04-24 17:190阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计602个文字,预计阅读时间需要3分钟。

如何准确区分 Integer.valueOf() 与 new Integer() 在对象创建与缓存池利用上的具体差异?

Integer.valueOf(int) 是静态工厂方法,内部根据输入值决定是否复用已有对象;new Integer(int) 是构造器调用,每次执行都会在堆上分配新内存并初始化新实例。

这意味着哪怕连续写十次 new Integer(42),也会产生十个彼此不等(== 为 false)的独立对象;而十次 Integer.valueOf(42) 在默认配置下只生成一个对象,其余九次返回同一引用。

缓存池只对 valueOf() 生效

Java 规范强制要求 Integer 类内置缓存区间:-128 到 127(含)。这个缓存由 IntegerCache 静态类维护,仅被 valueOf(int) 调用路径使用。

阅读全文

本文共计602个文字,预计阅读时间需要3分钟。

如何准确区分 Integer.valueOf() 与 new Integer() 在对象创建与缓存池利用上的具体差异?

Integer.valueOf(int) 是静态工厂方法,内部根据输入值决定是否复用已有对象;new Integer(int) 是构造器调用,每次执行都会在堆上分配新内存并初始化新实例。

这意味着哪怕连续写十次 new Integer(42),也会产生十个彼此不等(== 为 false)的独立对象;而十次 Integer.valueOf(42) 在默认配置下只生成一个对象,其余九次返回同一引用。

缓存池只对 valueOf() 生效

Java 规范强制要求 Integer 类内置缓存区间:-128 到 127(含)。这个缓存由 IntegerCache 静态类维护,仅被 valueOf(int) 调用路径使用。

阅读全文