integer常用方法(Integer与int到底相不相等)

hi,各位,好久不见,我是吹毛。

各位都知道java中int和integer的区别吗?

integer常用方法(Integer与int到底相不相等)(1)

什么?没区别?

其实,在我探知的领域范围内,我发现了一个最大的区别!

integer常用方法(Integer与int到底相不相等)(2)

对,长度也不同,你们真棒。。。

虽然这是个玩笑,不过你们也应该发现了点问题,int和其他n种类型并称为基础类型,而Integer其实更像我们自己写的一个类,对,他其实就是在int的基础上做的一个功能扩展类,此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。

恩,好像很有用的样子。

问个问题

integer常用方法(Integer与int到底相不相等)(3)

Integer与int对比

没错,相等。128和128肯定相等啊。

那这个呢?

integer常用方法(Integer与int到底相不相等)(4)

Integer与Integer对比

没错,不相等。

恩,好对哦。

再看这个呢?

integer常用方法(Integer与int到底相不相等)(5)

Integer与Integer对比

没错,相等。

相信有一定基础的人都知道其中的简单奥妙,我也相信你们知道最直接的原因,常量池嘛,范围嘛。但,,然后呢?

我先简单的解释一下,出现这种现象原因:

1.首先是“==”号,他代表的是查看双方的地址是否相同而不是值。

2.Integer有个常量池,在-128到127之间的数在最开始的时候都已经生成好放到了常量池中,当你想用的时候直接用就行了。

3.超过这个范围,常量池就没有了,所以需要新建一个,因为是新建的,所以值就不同了。

清晰明了,是不是觉得会了?明白了?

你明白什么了?这都是我告诉你的或者你自己知道的,为什么会这样你了解过吗?

integer常用方法(Integer与int到底相不相等)(6)

知道直接赋值127与 new Integer 127 有什么区别吗?

这个结果是什么呢?

这其中经过了哪些故事呢?


来,让我带你们看看里面究竟发生了什么。

首先,我先告诉你们结果,上面的结果是false,因为地址不一样,那地址为什么不一样了呢?

我先把上面的代码用工具进行反编译,给你们看一下。

integer常用方法(Integer与int到底相不相等)(7)

反编译后的代码

反编译以后,我们发现,在机器处理上面的代码的时候,他自己做了一个操作,就是将我们的赋值变成了valueOf方法,那valueOf方法里又描述的什么呢?接着看。

integer常用方法(Integer与int到底相不相等)(8)

Integer.valueOf源码

可以看到这里有个简单的if判断,如果你输入的不在-127到128之间,他直接给你new了一个Integer,如果在范围内,他就使用InterCache数组里的对应的值给你,InterCache就是我说的最开始初始化的常量池,具体代码如下,最重要的就一句话。

integer常用方法(Integer与int到底相不相等)(9)

就是初始化了-127到128数组

因为在-127到128之间,大家都用的一个数组里的值,所以地址肯定是相同的,值也是相同的,故:

Integer a = 127; Integer b = 127; System.out.println(a == b);

的结果为true。

Integer a = 128; Integer b = 128; System.out.println(a == b);

如果超过范围,那就直接new了一个新的Integer,因为大家各自new各自的,所以是两个不同的对象,故而地址肯定不同,所以返回false。

int a = 128; Integer b = 128; System.out.println(a == b);

int和Integer在对比的时候发生了什么呢?

在对比的时候,因为两种类型不同,所以Integer自动拆箱成了int。自动拆箱简单点讲就是在需要的时候转化成基础类型。所以这个就相当于两个基础类型的对比。

integer常用方法(Integer与int到底相不相等)(10)

int对比int

没错,答案就是true。Integer是个扩展工具类咱们说的什么常量池都是它的,这里咱们比的是最基础的基础类型,和刚才的没半毛钱关系,所以基础类型永远比对的都是值,所以他们永远相等!!别记混了噢!

int和Integer能扩展的大概就这么多,欢迎补充!

最后再来一个小扩展题。

integer常用方法(Integer与int到底相不相等)(11)

Integer和Long比对

这个的结果是什么呢?欢迎大家留言,并解释原理哦!

对,我是一个吹毛求疵的人,我喜欢用生动的语言和一颗执着的心探究程序的世界!

赶快关注“吹毛”的头条号哦,不要错过精彩!

最后感谢大家,手动比心。

integer常用方法(Integer与int到底相不相等)(12)

么么哒

爱你们

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页