先看一小段源码:

  1. Integer a1=;
  2. Integer a2=;
  3. Integer b1=new Integer();
  4. Integer b2=new Integer();
  5. Integer c1=;
  6. Integer c2=;
  7. System.out.println(a1==a2);
  8. System.out.println(b1==b2);
  9. System.out.println(c1==c2);

输出结果:true  false,false;

  首先b1==b2这个肯定是false,通过关键字new出来的地址存储在堆区并且地址是不同的,所以引用也不会相同

  关键是a和c都是直接赋值,为什么结果不一样呢?

  这是因为Integer作为int的包装类,它能对一定范围类的数据有缓存.(通过查看Integer类的源码)

  

  1. private static class IntegerCache {
  2. static final int low = -;
  3. static final int high;
  4. static final Integer cache[];
  5.  
  6. static {
  7. // high value may be configured by property
  8. int h = ;
  9. String integerCacheHighPropValue =
  10. sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
  11. if (integerCacheHighPropValue != null) {
  12. try {
  13. int i = parseInt(integerCacheHighPropValue);
  14. i = Math.max(i, );
  15. // Maximum array size is Integer.MAX_VALUE
  16. h = Math.min(i, Integer.MAX_VALUE - (-low) -);
  17. } catch( NumberFormatException nfe) {
  18. // If the property cannot be parsed into an int, ignore it.
  19. }
  20. }
  21. high = h;
  22.  
  23. cache = new Integer[(high - low) + ];
  24. int j = low;
  25. for(int k = ; k < cache.length; k++)
  26. cache[k] = new Integer(j++);
  27.  
  28. // range [-128, 127] must be interned (JLS7 5.1.7)
  29. assert IntegerCache.high >= ;
  30. }
  31.  
  32. private IntegerCache() {}
  33. }

这个具体的范围可知为:-128-127

    然后直接赋值的时候,会内部调用Integer的valueof(int)的方法

    

  1. public static Integer valueOf(int i) {
  2. if (i >= IntegerCache.low && i <= IntegerCache.high)
  3. return IntegerCache.cache[i + (-IntegerCache.low)];
  4. return new Integer(i);
  5. }

    valueof(int)方法,若数值在-128-127之间,直接从缓存cache中读取,若是不在,直接通过new操作符创建

    

  

有关于Integer的一些小问题的更多相关文章

  1. java Integer == 比较的小问题

    示例代码: @Test public void testEquals() { Integer a = 127; Integer b = 127; if(a == b) { System.out.pri ...

  2. Integer.valueOf与Integer.parseInt的小疑惑

    参考博客: http://www.importnew.com/9162.html 测试代码如下: public class Main { /** * 备注:结果跟你的JDK版本有关系: * * 我的是 ...

  3. Integer的一个小问题

    看面试题的时候看到这道题: public class Demo { public static void main(String[] args) { Integer i1 = 128; Integer ...

  4. int与Integer的一个小区别

    int不能为空,而Integer可以赋空值

  5. 面试常问小知识点之Integer

    背景 今天在查看Sonar的时候发现小伙伴在某些场景下如下使用 很明显sonar已经报错了,但是线上应用目前是正常的 问题 事实上经常会有面试的小伙伴或者笔试的小伙伴问这个问题 Integer的一些小 ...

  6. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  7. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  8. Oracle、SQL Server、MySQL数据类型对比

    1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...

  9. sql server 查询数据库所有的表名+字段

    SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT    (case when a.colorder= ...

随机推荐

  1. DevExpress Cpicturebox或者Dev控件 PictureEdit 按比例的缩放加载图片

    方法一:     如果要加载的图片的长宽比不是太过失衡, 1.可以改变picturebox的SizeMode属性为 PictureBoxSizeMode.StretchImage, 2.或者Dev控件 ...

  2. 微软Azure通知中心 (Azure Notification Hubs)

    Azure Notification Hubs 提供简单的方法从后台(azure或者on-promise)去发送通知在不同的平台上面(iOS, Android, Windows, Kindle, Ba ...

  3. JMeter 各组件介绍以及用法

    录制脚本 常用组件 参数化 关联

  4. java数据类型取值范围

    1个字节:boolean, byte 2个字节:short, char 4个字节:int, float 8个字节:long, double 按照我们初学者的理解1byte=8bit,也就是说1个字节可 ...

  5. Windows git 初始设置

    主要布署在 Linux 服务器上时,将全局设置 为提交自动转为 LF,签出不转换.git config --global core.autocrlf input(无效了,按默认即可) 设置全局用户名.

  6. windows下尝试编写node模块

    1,首先参考http://www.cnblogs.com/yupeng/p/3469444.html写了一个模块 2,按照指引运行 F:\Program Files\nodejs\mymodule&g ...

  7. js 递归

    我理解的递归就是自己调用自己,也就是函数在调用的时候会形成 call stack 调用堆栈.这些数据是用来函数调用完成后,回复之前的函数环境或者局部变量之类的,一般这个都有大小限制,不可能无限生成函数 ...

  8. create-react-app:reject和不reject(使用react-app-rewired)这2种情况下的antd组件按需引入配置

    create-react-app:eject和不eject(使用react-app-rewired)这2种情况下的antd组件按需引入配置: 不eject(使用react-app-rewired)配置 ...

  9. redux 知识点

    redux原理:store中维护了一个state,我们dispatch一个action,接下来reducer根据这个action更新state. react-redux提供两个关键模块:Provide ...

  10. bzoj 4349 最小树形图——朱刘算法

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4349. 学习博客:http://www.cnblogs.com/xzxl/p/7243466 ...