Integer和int的区别(转)
2024-08-28 14:24:16
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再去比。
最新文章
- HLSL之镜面反射光照
- libevent系列文章
- 无锁编程(六) - seqlock(顺序锁)
- [老老实实学WCF] 第一篇 Hello WCF
- Keepalived+Nginx+Tomcat配置高可用负载均衡系统示例
- HDU 3065 病毒在继续 (AC自己主动机)
- File对象的常用方法
- 老李分享: 并行计算基础&;编程模型与工具 2
- maven pom.xml 详细
- python学习快人一步,从19个语法开始!
- php7 安装mssql 扩展
- python regularexpress1
- SharePoint2016配置工作流开发环境
- 福大软工1816 · 第八次作业(课堂实战)- 项目UML设计(团队)
- thinkPHP3.2.2 控制器内跳转的三种方式
- Cookie对象与Session对象-java
- linux内核获取当前进程路径分析
- 蓝桥杯 基础练习 BASIC-19 完美的代价
- 图测试题部分总结.ing
- springboot整合actuator,进行运维监控
热门文章
- [NOIP2003] 提高组 洛谷P1040 加分二叉树
- 【ZJOI2017 Round1练习】D2T3 counter(线段树)
- BZOJ1710: [Usaco2007 Open]Cheappal 廉价回文
- Copy List with Random Pointer (Hash表)
- mybatis几种开发方式
- SQL Server vNext CTP 1.2
- ArcGIS engine中Display类库——Display
- java获取本机机器名
- 通过k8s(Kubernetes)搭建jmeter的压测环境master-slave架构,实现弹性伸缩
- Meteor跟踪器(Tracker)