int 和 Integer
程序员文章站
2024-01-10 08:53:58
...
int 和 Integer
以最简单的代码来看
int a = 100, b =100;
System.out.println(a == b); //true
Integer c = 100, d =100;
System.out.println(c == d); //true
int e = 1000, f =1000;
System.out.println(e == f); //true
Integer g = 1000, h =1000;
System.out.println(g == h); //false
为什么会有上述结果?
首先,int是基本数据来类型之一,而Integer是int的包装类。
一个小知识点,“==” 它是用来比较是否相等的:
- 如果“==”两边是基本数据类型,则会直接比较值;那int类型的100自然是等于100的,1000和1000自然也是相等的。
- 如果“==”两边是对象类型,则会比较两个对象的地址,不同的对象一般情况下地址当然是不同的,g和h就是两个不同的Integer对象,地址自然不同,也就不成立。
那为什么c和d会相等呢?
这涉及到java中一个自动装箱的概念,将基本数据类型转为包装类型叫做装箱,反过来叫拆箱。在对包装类进行一些算数运算时,会执行自动装箱和拆箱,而这个自动的范围是有限制的,对于int来讲,范围是 -128~127之间,于是Integer对象的值为100的时候可以执行自动拆箱,结果自然是100等于100,而值为1000时,超出了范围,不再比较值而是比较地址,于是结果是false。
上一篇: 这样写为什么不能获取内容?