public class TestInteger {
public static void main(String[] args) {
int i = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
System.out.println(i == i2); //Integer会自动拆箱为int,所以为true
System.out.println(i == i3);//true,理由同上
System.out.println(i3 == i2);//false
Integer i4 = 127;//编译时被翻译成:Integer i4 = Integer.valueOf(127);
Integer i5 = 127;
System.out.println(i4 == i5);//true
Integer i6 = 128;
Integer i7 = 128;
System.out.println(i6 == i7);//false
Integer i8 = new Integer(127);
System.out.println(i5 == i8); //false
Integer i9 = new Integer(12);
Integer i10 = new Integer(12);
System.out.println(i9 == i10); //false
}
}

为什么i4和i5比是true,而i6和i7比是false呢?关键就是看valueOf()函数了,这个函数对于-128到127之间的数,会进行缓存, Integer i5 = 127时,会将127进行缓存,下次再写Integer i6 = 127时,就会直接从缓存中取,就不会new了。所以i4和i5比是true,而i6和i7比是false。

而对于后边的i5和i8,以及i9和i10,因为对象不一样,所以为false。

以上的情况总结如下:

1,无论如何,Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不一样,所以为false。

2,两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。因为java在编译Integer i2 = 128的时候,被翻译成:Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。

3,两个都是new出来的,都为false。还是内存地址不一样。

4,int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比。

最新文章

  1. HLSL之镜面反射光照
  2. libevent系列文章
  3. 无锁编程(六) - seqlock(顺序锁)
  4. [老老实实学WCF] 第一篇 Hello WCF
  5. Keepalived+Nginx+Tomcat配置高可用负载均衡系统示例
  6. HDU 3065 病毒在继续 (AC自己主动机)
  7. File对象的常用方法
  8. 老李分享: 并行计算基础&编程模型与工具 2
  9. maven pom.xml 详细
  10. python学习快人一步,从19个语法开始!
  11. php7 安装mssql 扩展
  12. python regularexpress1
  13. SharePoint2016配置工作流开发环境
  14. 福大软工1816 · 第八次作业(课堂实战)- 项目UML设计(团队)
  15. thinkPHP3.2.2 控制器内跳转的三种方式
  16. Cookie对象与Session对象-java
  17. linux内核获取当前进程路径分析
  18. 蓝桥杯 基础练习 BASIC-19 完美的代价
  19. 图测试题部分总结.ing
  20. springboot整合actuator,进行运维监控

热门文章

  1. [NOIP2003] 提高组 洛谷P1040 加分二叉树
  2. 【ZJOI2017 Round1练习】D2T3 counter(线段树)
  3. BZOJ1710: [Usaco2007 Open]Cheappal 廉价回文
  4. Copy List with Random Pointer (Hash表)
  5. mybatis几种开发方式
  6. SQL Server vNext CTP 1.2
  7. ArcGIS engine中Display类库——Display
  8. java获取本机机器名
  9. 通过k8s(Kubernetes)搭建jmeter的压测环境master-slave架构,实现弹性伸缩
  10. Meteor跟踪器(Tracker)