java中Integer.valueOf和new Integer的区别 - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/11 11:01:18 2023/08/11
【摘要】 在Java中,​​Integer.valueOf()​​​和​​new Integer()​​是创建Integer对象的两种方式,它们之间有一些区别。返回类型:​​Integer.valueOf()​​方法返回一个​​Integer​​对象,而​​new Integer()​​返回一个​​new Integer​​的实例。缓存:​​Integer.valueOf()​​方法在内部使用了一个缓...

在Java中,​​Integer.valueOf()​​​和​​new Integer()​​是创建Integer对象的两种方式,它们之间有一些区别。

  1. 返回类型:​​Integer.valueOf()​​方法返回一个​​Integer​​对象,而​​new Integer()​​返回一个​​new Integer​​的实例。
  2. 缓存:​​Integer.valueOf()​​方法在内部使用了一个缓存,它会缓存在范围-128到127之间的所有整数对象,这样在创建这些整数对象时,会直接返回缓存中的对象,而不会创建新的对象。而​​new Integer()​​则会每次都创建一个新的整数对象。
  3. 自动拆箱:​​Integer.valueOf()​​方法返回的是一个​​Integer​​包装类对象,可以直接赋值给​​int​​类型的变量,会自动进行拆箱操作。而​​new Integer()​​返回的是一个​​Integer​​对象,需要通过调用​​intValue()​​方法才能获取其对应的​​int​​值。
  4. 内存占用:由于​​Integer.valueOf()​​方法使用了缓存,所以在频繁创建小于等于127的整数对象时,可以减少内存占用。而​​new Integer()​​每次都会创建一个新的对象,可能会造成内存浪费。 综上所述,推荐使用​​Integer.valueOf()​​方法来创建​​Integer​​对象,特别是在创建整数对象范围在-128到127之间的情况下,可以减少内存占用并提高性能。但在需要创建不在缓存范围内的整数对象时,需要使用​​new Integer()​​方法来创建新的对象。

以下是使用​​Integer.valueOf()​​​和​​new Integer()​​​创建​​Integer​​对象的示例代码:

javaCopy code// 使用 Integer.valueOf() 方法创建 Integer 对象
Integer num1 = Integer.valueOf(10); // 使用缓存,返回缓存中的对象
Integer num2 = Integer.valueOf(10); // 使用缓存,返回缓存中的对象
System.out.println(num1 == num2); // 输出 true,表示为同一个对象
// 使用 new Integer() 方法创建 Integer 对象
Integer num3 = new Integer(10); // 创建新的 Integer 对象
Integer num4 = new Integer(10); // 创建新的 Integer 对象
System.out.println(num3 == num4); // 输出 false,表示为不同的对象
// 使用 Integer.valueOf() 方法进行自动拆箱
int value1 = Integer.valueOf(10); // 自动拆箱为 int 类型
int value2 = new Integer(10).intValue(); // 手动拆箱为 int 类型
System.out.println(value1); // 输出 10
System.out.println(value2); // 输出 10

需要注意的是,​​==​​运算符用于比较对象引用是否相等,而不是比较对象的值是否相等。如果要比较对象的值是否相等,应该使用​​.equals()​​方法:

javaCopy codeSystem.out.println(num1.equals(num2)); // 输出 true
System.out.println(num3.equals(num4)); // 输出 true

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。