Integer、Long 等包装类 == 值判断、地址判断与缓存

这篇具有很好参考价值的文章主要介绍了Integer、Long 等包装类 == 值判断、地址判断与缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先看下以下代码和输出

   public static void main(String[] args) throws Exception{
        Integer a=-128;
        Integer aa=-128;
        System.out.printf("a=aa? %s \n",a==aa);
        Integer b=127;
        Integer bb=127;
        System.out.printf("b=bb? %s \n",b==bb);
        Integer c=128;
        Integer cc=128;
        System.out.printf("c=cc? %s \n",c==cc);
        Integer d=126;
        Integer dd= new Integer(126);
        System.out.printf("d=dd? %s \n",d==dd);
        int e=12611;
        Integer ee= new Integer(12611);
        System.out.printf("e=ee? %s \n",e==ee);
        int f=12611;
        Integer ff= 12611;
        System.out.printf("f=ff? %s \n",f==ff);

    }

a=aa? true 
b=bb? true 
c=cc? false 
d=dd? false 
e=ee? true 
f=ff? true 

那么为什么会会出现这样的结果呢?

这是因为==只有在Java基本类型(short,int,long,byte,char,float,double,boolean)中比较的是值,其他类型中比较的是内存地址。因此,InteGer类中==比较的是内存地址,而不是值从而导致c和cc因为内存地址不相同导致c==cc不相同。

那为什么a=aa 和 b=bb 运行起来又是ture呢?

这是因为Integer类在-128至127(默认)区间的Integer实例缓存到cache数组中,所以

a=aa 和 b=bb都是true

那为什么d=dd 运行起来又是ture呢,他们都在-128和127之间啊?

这是因为区间的Integer实例缓存不包含new出来的对象

总结

Integer 和 int == 这样判断相等是可以的,

而Integer 和 Integer 要判断相等,推荐用equals (NULL值时也可以判断)文章来源地址https://www.toymoban.com/news/detail-687449.html

到了这里,关于Integer、Long 等包装类 == 值判断、地址判断与缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cause: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long错误的详细解决方法

    今天写好 hive表导入的回调 的接口,如下代码所示: 启动 postman 访问该接口,确报出如下错误: 即 Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long 根据 java.lang.ClassCastException 可知,这是 java 类型转换的异常错误。 其次,再将错误信息 java.lang.String cannot b

    2024年02月13日
    浏览(45)
  • java.lang.Integer and java.lang.Long are in module java.base of loader 'bootstrap' springboot的异常信息,怎...

    这个错误信息表示在Spring Boot应用程序中,类 java.lang.Integer 和 java.lang.Long 被认为在模块 java.base 中加载,但实际上它们在应用程序的类路径中可用。 这通常是由于使用了不同版本的Java来运行应用程序和加载类路径上的类。 为了解决这个问题,可以使用以下方法之一: 确保应

    2024年02月11日
    浏览(68)
  • Java中判断Integer是否为null的详细解析

    简介 在java编写过程中,我们会使用到各种各样的表达式,在使用表达式的过程中,有哪些安全问题需要我们注意的呢?一起来看看吧。 来看看小编挑选的这本书对你是否有用: 注意表达式的返回值 我们在使用JDK库的时候,一定要注意认真的读一下JDK中方法的含义和它的返

    2024年02月13日
    浏览(38)
  • Java 装箱拆箱原理 & 包装类型缓存池

    byte short int long float double boolean char 为了让上述基本数据类型可以转为对象,Java在1.5推出了一系列包装类,基本类和包装类互相转换的过程,称为装箱和拆箱 缓存池也叫常量池。它是事先存储一些常量数据用以提高性能节省空间的一种技术,大部分的包装类型都实现了缓存池

    2024年02月16日
    浏览(38)
  • 关于Redis-存Long取Integer类型转换错误的问题

    背景 最近遇到了两个Redis相关的问题,趁着清明假期,梳理整理。 1.存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误。 2.String对象的反序列化问题,直接在Redis服务器上新增一个key-value,而后在代码中get(key)时,报反序列化失败。 关于Long类型转换错误 Red

    2024年02月15日
    浏览(31)
  • Integer中缓存池讲解

    Integer缓存池是一种优化技术,用于提高整数对象的重用和性能。在Java中,对于整数值在 -128 到 127 之间的整数对象,会被放入缓存池中,以便重复使用。这是因为在这个范围内的整数值被频繁使用,因此重用这些对象可以节省内存和提高性能。当使用自动装箱机制创建整数对

    2024年02月12日
    浏览(41)
  • 判断int或Integer变量值为空值null

    1.int型变量的值不能为空值null 2.Integer类表示一个int值,但可以包含一个空值null 3.判断Integer变量是否为空值null:Integer变量== null;Integer变量!= null demo示例程序如下: 运行结果:

    2024年02月11日
    浏览(50)
  • Java中Integer方法

    本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记 进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。 Integer类提供了许多方法来操作整数值。 定义 分析

    2024年02月14日
    浏览(48)
  • Java --- Integer.parseInt()

    parseInt() 方法是java.lang 包下Integer 类的一个方法。 Java Integer parseInt() 方法共有三种不同类型,可以根据其参数进行区分。 以下是 parseInt() 方法的声明: 数据类型 参数 描述 必需/可选 String s 它是一个需要转换为等效整数的字符串。 Required int radix 解析字符串时使用的基数 Re

    2024年02月16日
    浏览(36)
  • 在Java中将Double转换为Integer

    首先,初始化一个double值 现在,使用intValue()方法将Double转换为Integer值 以下是在Java中将Double转换为Integer的程序 输出结果

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包