原文出处:http://hi.baidu.com/eduask%C9%BD%C8%AA/blog/item/227bf4d81c71ebf538012f53.html

package com.test;
public class Test {
public static void main(String []args) {
Integer a = 100;//此处若使用new,则==值必为false
Integer b = 100;
System.out.println(a==b);//true
Integer c = 150;
Integer d = 150;
System.out.println(c==d);//false
}
}

  这是什么原因呢?
  1。java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);
  2。比较的时候仍然是对象的比较
  3。在jdk源码中

public static Integer valueOf(int i) {
  final int offset = 128;
  if (i >= -128 && i <= 127) { // must cache
  return IntegerCache.cache[i + offset]; //符合值范围时候,进入也创建好的静态IntergerCache,i+offset的值表示去取cache数组中那个下标的值
  }
  return new Integer(i); //当不符合-128 127值范围时候。记住用的:new,开辟新的内存空间,不属于IntergerCache管理区
}

  而

private static class IntegerCache {
  private IntegerCache(){}
  static final Integer cache[] = new Integer[-(-128) + 127 + 1]; //开辟-128到127的内存区。有0的位置哦
  static {
    for(int i = 0; i < cache.length; i++)
      cache[i] = new Integer(i - 128); //为内存区的数组每个对象赋值
    }
  }

  这边是java为了提高效率,初始化了-128--127之间的整数对象,所以在赋值在这个范围内都是同一个对象。

  

  再加一句
  Integer a = 100;
  a++;
  //这边a++是新创建了一个对象,不是以前的对象。

    public static void main(String []args) {
Integer a = 100;
Integer b = a;//此时b指针指向值为100的堆地址 即a的堆地址,a==b成立
a++;//此时a指向的值发生变化为101,a指针指向101的堆地址。而b任然指向100
System.out.println(a==b);//false
}

 

最新文章

  1. Zabbix 3.0 安装笔记
  2. c# winform 火狐浏览器 查看cookie
  3. 使用tomcat7创建异步servlet
  4. codeforces 615D - Multipliers
  5. android 的异步任务
  6. 用urllib2实现一个下载器的思路
  7. Photon的log使用
  8. Linux下apache的停止、开启、重启
  9. getActionBar().setTitle(); Java.lang.NullPoint异常解决方案
  10. 两种计算和输出n内5要么9除尽互惠
  11. 模仿c的字符转整数函数 atoi
  12. bingo 跨action异步获取参数
  13. discuz 添加板块失败解决办法
  14. loadrunner提高篇-场景设计实践
  15. sqlserver与mysql中vachar(n)中遇到的坑
  16. SpringMVC框架(四)文件的上传下载,上下文路径
  17. Go 语言函数
  18. MYSQL—— 基础入门,select 查询涉及到的关键字组合详解(进阶篇)
  19. IDEA 出现错误:找不到或无法加载主类
  20. SharePoint REST API - 列表和列表项

热门文章

  1. 吴裕雄--天生自然python机器学习:KNN-近邻算法在手写识别系统上的应用
  2. java通过jdbc插入中文到mysql显示乱码(问号或者乱码)
  3. nginx+php+扩展件安装实践版
  4. Java设计模-过滤器模式
  5. 蓝桥杯-PREV45-图形排版
  6. 视觉SLAM算法框架解析(3) SVO
  7. react项目中引入了redux后js控制路由跳转方案
  8. [LC] 295. Find Median from Data Stream
  9. echart封装,前端简单路由,图表设置自动化
  10. EventBus 3.0 的基本使用