美文网首页
java中包装类型比较问题

java中包装类型比较问题

作者: SteveLaw1124 | 来源:发表于2020-03-09 12:05 被阅读0次

1.在java中基础数据类型int,long,float,double...等等对应的包装类为Integer,Long,Float,Double...

在对数据进行比较的时候如

int a = 1000;int b=1000;

if( a == b){
    return true
}else{
    return false
}

我们都知道程序运行的结果是true;

2.但是包装类情况就不一样了

先来一段代码,直接上图
我们拿Integer做示范


代码片段1

可以看到a1和a2同样是100 比较两个值时得到了正确的结果,但是b1和b2的值虽然都相同但是比较的结果时false

为什么会出现这种情况呢?

我们先要明白一件事,包装类的对象是对象,对象用==比较的是对象的地址

Integer b1 = 1000; 其实b1 是一个对象,是java自动把1000包装成Integer对象(new Integer(1000))并赋值给b1
同理b2也是一个对象,此时使用==,那么比较的是b1和b2的对象地址,当然为false啦;

那么为什么100又能使用==比较呢?

原来包装类型Integer在内部会对较小的数值进行缓存(-128 ~ 127),然后其他的Integer对象若是拿-128 ~ 127的值是直接从缓存拿的,我摘取一段Integer类的源码


integer内部源码1
integer内部源码2

很明显此时的a1 和 a2都是IntegerCache中的同一个缓存,所以可以直接用==比较

3.如何正确使用方式

其实也很简单
我们可以使用Integer类的intValue()获取值后进行比较
b1.intValue() == b2.intValue()


integer内部源码3 integer内部源码4

或者使用equals()方法,Integer对equals进行了重写,源码是这样的


integer内部源码5

b1.equals(b2);

相关文章

  • java中包装类型比较问题

    1.在java中基础数据类型int,long,float,double...等等对应的包装类为Integer,Lo...

  • JAVA中的对象

    java8增强的包装类 java中基本数据类型不能当作对象类型变量使用的问题, java提供了包装类 (Wrapp...

  • Java中基本类型和包装类的各类比较(==),以及包装类的对象缓

    Java中的基本类型及其包装类的比较(==)一直是一个比较头疼的问题,不仅有自动装箱和拆箱操作,部分的包装类还有对...

  • Java中必须了解的常用类

    学习了解# Java中的包装类 Java中基本类型和包装类型之间的转换 Java中基本类型和字符串之间的转换 使用...

  • JavaSE进阶五 包装类

    java中的包装类 java中对8种基本数据类型提供了8种包装类型;包装类是引用类型,父类是Object。 为什么...

  • Kotlin基本类型(对比Java)

    上图是Kotlin和Java基本类型的比较图,比较简单,可以看出Kotlin是没有包装类型的。 类型声明 Java...

  • [Java基础]包装类型

    [Java基础]包装类 了解一下 什么是包装类型在 Java 中, 数据类型总共可以分为2大类 : 基础数据类型和...

  • Java面试题汇总

    1.java中包装类与引用类型_包装类型与引用类型的使用场景: https://blog.csdn.net/wei...

  • Java比较浮点数的正确方式

    今天在读《Java开发手册》时,看到浮点数的等值判断问题「浮点数的基本数据类型不能用 == 比较,包装数据类型不能...

  • 常用类_包装类型

    java中有八种基本数据类型对应的包装类型:基本数据类型 包装类型byte :java.lang.Byte...

网友评论

      本文标题:java中包装类型比较问题

      本文链接:https://www.haomeiwen.com/subject/klbudhtx.html