Java Integer及int装箱拆箱对比

 更新时间:2020年09月15日 10:50:54   作者:bf378  
这篇文章主要介绍了Java Integer及int装箱拆箱对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

示例代码:

class BoxIntInteger {
 
  public static void main(String[] args) {
 
    Integer a = new Integer(10111);
    int b = 10111;
    boolean equal1 = a == b;
    boolean equal2 = a.equals(b);
    System.out.println(equal1);
    System.out.println(equal2);
  }
}

反编译字节码:

public static void main(String args[])
{
  Integer a = new Integer(10111);
  int b = 10111;
  boolean equal1 = a.intValue() == b; 
  boolean equal2 = a.equals(Integer.valueOf(b));
  System.out.println(equal1);
  System.out.println(equal2);    
}

1:可以看出对于Integer与int使用==比较大小的话,优先Integer拆箱。

2: 如果使用equals比较大小的话,则int装箱。

提示:对于Integer与int之间大小比较优先使用equals比较,否则容易出现空指针,例如:

Integer c= null;
System.out.println(c==1);

原因:由于Integer需要调用intValue进行拆箱,因而空指针。

Integer与Integer必须使用equals方法比较,这个就不必解释了。但是通常我们可以看先Integer与Integer之间使用==也可以正确比较,原因是:Integer对于-128到127之间的数字在缓存中拿,不是创建新对象。

缓存获取数据源码:java.lang.Integer#valueOf(int)

public static Integer valueOf(int i) {
  if (i >= IntegerCache.low && i <= IntegerCache.high)
    return IntegerCache.cache[i + (-IntegerCache.low)];
  return new Integer(i);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java中全排列的生成算法汇总

    java中全排列的生成算法汇总

    本文给大家汇总介绍了常见的6种全排列的生成算法,包括字典序法、递增进位数制法、递减进位数制法、邻位交换法、递归类算法、元素增值法,有需要的小伙伴可以参考下
    2015-07-07
  • java基于包结构的请求路由实现实例分享

    java基于包结构的请求路由实现实例分享

    基于包结构的请求路由简单实现实例分享,大家参考使用吧
    2013-12-12
  • 浅谈Java之终止继承:Final类和Fianl方法

    浅谈Java之终止继承:Final类和Fianl方法

    这篇文章主要介绍了Java之终止继承:Final类和Fianl方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • SpringBoot条件注解之@ConditionalOnClass等注解的使用场景分析

    SpringBoot条件注解之@ConditionalOnClass等注解的使用场景分析

    文章详细介绍了SpringBoot中条件注解的体系,包括基本概念、@ConditionalOnClass等常用注解的工作原理和使用场景,文章还探讨了条件注解的组合使用、实战应用以及最佳实践,帮助开发者更好地理解和应用条件注解,实现更灵活和智能的应用配置,感兴趣的朋友一起看看吧
    2025-03-03
  • idea如何通过maven指定JDK版本

    idea如何通过maven指定JDK版本

    这篇文章主要介绍了idea如何通过maven指定JDK版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java三个环境变量配置简单教程

    java三个环境变量配置简单教程

    这篇文章主要为大家详细介绍了java三个环境变量配置简单教程,配置path变量、配置classpath变量、最后是配置JAVA_HOME变量,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • springboot项目打包发布部署的过程及jar和war的区别

    springboot项目打包发布部署的过程及jar和war的区别

    Spring Boot使用了内嵌容器,因此它的部署方式也变得非常简单灵活,可以将Spring Boot项目打包成JAR包来独立运行,Spring Boot项目既可以生成WAR包发布,也可以生成JAR包发布,那么它们有什么区别呢
    2022-11-11
  • Java可视化之实现文本的加密和解密

    Java可视化之实现文本的加密和解密

    这篇文章主要介绍了Java可视化之实现文本的加密和解密,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Spring两种任务调度Scheduled和Async的区别和应用场景详解

    Spring两种任务调度Scheduled和Async的区别和应用场景详解

    在现代应用程序中,任务调度是一个非常普遍的需求,Spring框架提供了两种主要的方式来实现任务调度:​​Scheduled​​ 和 ​​Async​​,在这篇文章中,我们将详细介绍这两种方式的区别和应用场景,需要的朋友可以参考下
    2024-12-12
  • mybatis如何使用注解实现一对多关联查询

    mybatis如何使用注解实现一对多关联查询

    这篇文章主要介绍了mybatis如何使用注解实现一对多关联查询的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论