[面试] Integer = 100,Integer = 128

前言:
今天看到了一道面试题,就是关于Integer定义的两个变量进行比较,觉得挺有意义的,所以作此记录。

题目介绍
        Integer a = 100;
        Integer b = 100;
        System.out.println(a==b);
        Integer c = 128;
        Integer d = 128;
        System.out.println(c==d);

上面的代码,运行结果是多少?
正确的运行结果如下:
在这里插入图片描述
为什么会这样呢?下面我们就来分析以下。

分析

基本数据类型,通过==比较的是他们的值大小,而引用类型比较的是他们的引用地址。
所以初看这道题,我们都会认为结果应该为两个false,因为Integer是一个类呀,a、b是引用类型,内存地址应该是不同的呀,为什么相同了,所以我们进入源码看一下怎么回事。
在这里插入图片描述
当我们给一个Integer赋予一个int类型的时候会调用Integer的静态方法valueOf。
我们还看到Integer范围是 “-128~127”,当i在这个范围内是从IntegerCache中直接获取,当超越这个范围才会new出一个新Integer对象。
再看下面的例子:

        Integer a = new Integer(100);
        Integer b = 100;
        int c = 100;
        Integer d = 100;
        System.out.println(a==b);
        System.out.println(a==c);
        System.out.println(b==c);
        System.out.println(b==d);
        System.out.println(System.identityHashCode(a));
        System.out.println(System.identityHashCode(b));
        System.out.println(System.identityHashCode(c));
        System.out.println(System.identityHashCode(d));

运行结果如下:
在这里插入图片描述
Integer与int数据类型进行比较的时候,会先将Integer转换程int型,在做值得比较,所以返回得是true。

Java中也有Integer类似得是Long,她也有一个缓存,在区间[-128,127]范围内获取缓存得值,而Long与long比较得时候先转换成long类型在做值得比较。
Double类型,他没有缓存,但是当Double与double比较的时候会先转换成double类型,再做值的比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值