Integer == 的诡异问题

作者: 窝牛狂奔 | 来源:发表于2017-03-22 17:59 被阅读22次

首先,我们来看一个诡异的问题:

运行结果:

true

false

false

一直认为,第一个判断应该是false,因为肯定是两个不同的对象.第二个判断应该不管第一个判断是true还是false,肯定跟第一个一样.但结果就是这么神奇!原因是什么呢?

其实现象可以分解为两个问题:

1.直接赋值和用new来赋值有什么区别?

2.为什么同样是直接赋值1和129会不一样?

解释如下:

直接赋值,实际上是自动装箱,装箱的时候,调用的是Integer.valueof()方法.看了下jdk的源码发现如果值在[-128,127]之间,那么,返回的是IntegerCache里的对象.所以第一个结果是true,第二个结果是false.

而new则是堆里的一个普通对象,所以第三个结果是false.


我是蜗牛狂奔,一个穿梭于梦想与现实间的男人.

相关文章

  • Integer == 的诡异问题

    首先,我们来看一个诡异的问题: 运行结果: true false false 一直认为,第一个判断应该是false...

  • 9.int 和 Integer 有什么区别,Integer的值缓

    问题:int 和 Integer 有什么区别,Integer的值缓存范围? 一、int 和 Integer 的基本...

  • Integer与Integer,int与Integer能不能直接

    1.问题:Integer与Integer,int与Integer能不能直接进行==,!=,<,>,<=,>=等的运...

  • Integer.parseInt(s)和Integer.valu

    前言 今天再看Integer源码的时候,发现了一个问题, Integer.parseInt(s)和Integer....

  • 诡异的问题

    最近看了一个很诡异的推理,分享一下,一定要慢慢的往下看,这样你才能真的体会到真的真的很诡异的! 请看到这个测试的朋...

  • 诡异的问题

    1 在还可以大言不惭地自称为少年的时代里,我远比现在已足够老的时候要焦虑得多。 十四岁那年,我坐在教室的后排窗边,...

  • 诡异问题

    在使用了mybatis的工程里面,单独执行类的main 方法,进行jdbc连接时报空指针

  • Integer的缓存问题

    目录----测试代码----问题: 为什么测试代码中 a1 == a2 为true, 而a == b 为false...

  • JVM虚拟机面经【自用】

    全面的问题 1. int a = 8; Integer a = new Integer(8); 各占用多大的空间?...

  • Integer

    有一个很经典的问题如下: Integer a = 127; Integer b = 127; System.out...

网友评论

    本文标题:Integer == 的诡异问题

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