Integer.valueOf源码分析 您所在的位置:网站首页 integervalueof Integer.valueOf源码分析

Integer.valueOf源码分析

2023-04-10 00:18| 来源: 网络整理| 查看: 265

1. 引言

在牛客网上看到这样一道题目,判断一下打印的结果

public static void main(String[] args){ Integer i1 = 128; Integer i2 = 128; System.out.println(i1==i2); Integer i3 = 100; Integer i4 = 100; System.out.println(i3==i4); }

刚开始看到是,是这样来判断的:因为 Integer i1 = 128 这条语句,Integer 会启用自动装箱功能,调用 Integer.valueOf 方法返回一个 Integer 对象,因此这四个对象应该指向不同的地址,所以打印的结果是两个 false。但是在 eclipse 运行结果如下,为什么会这样呢?

运行结果

2. 分析

首先想到的就是 Integer.valueOf 这个方法有点蹊跷,因此就去看了一下它的源码,它的内部实现如下:

public static Integer valueOf(int i) { if (i >= IntegerCache.low && i = 127; }

从中可以看出,high 的值是由 h 决定的,h 一般为 127。这说明,当 valueOf 传入的参数值在 -128~127 之间,这些数值都会存储在静态数组 cache 中。因此,在 valueOf 方法里,参数在 -128~127 之间,返回 Integer 对象的地址引用是一样的,对于题目也有了正确的解答。

3. 总结

刚开始学编程时,如果碰到问题时,都是把报错的信息赋值到百度或者谷歌上进行搜索,直接根据被人的踩坑经验,按照他们给的步骤来解决问题,现在我又发现了一种更高效的解决方案 -- 直接看源码,直接了解底层的实现,很快就可以解决问题了。所以,把自己的基础打牢,勿以浮沙筑高台!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有