概述
今天复习时,遇到了Integer类型与int类型的值比较,就写了一段代码来测试一下结果:
public class Test9 {
public static void main(String[] args) {
Integer i01 = 12;
int i02 = 12;//基本数据类型
Integer i03 = Integer.valueOf(12);//此处就相当于是Integer i03 =12;
Integer i04 = new Integer(12);
System.out.println(i01==i02);//true
System.out.println(i03==i04);//false
System.out.println(i01==i04);//false
System.out.println(i02==i04);//true
System.out.println(i01==i03);//true
System.out.println(i02==i03);//true
}
}
下面我们就来一一说下这些结果的原理吧:
(1)
System.out.println(i01==i02);//true
Integer i01 = 12;
int i02 = 12;
Integer属于包装类,int属于基本数据类型;
只要Integer和int类型的值进行 == 比较,就会将Integer包装类拆箱为int类型,
所以当进行 i01==i02比较时,就相当于两个int类型的值进行比较;
基本数据类型与基本数据类型进行比较,就是比较值的内容;
(2)
System.out.println(i03==i04);//false
Integer i03 = Integer.valueOf(12); 此处就相当于是Integer i03 =12;
Integer i04 = new Integer(12);
首先,我们要先明确一件事:
对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象;
i03和i04都是Integer对象,两个Integer对象进行比较;
i03是一个Integer对象,因为i03是用直接赋值法产生的对象,它会将该对象放入IntegerCache.cache中,
i04是使用new产生的对象,会重新创建一个堆空间,不会复用IntegerCache.cache中的对象,与 String的直接赋值法创建对象和使用new创建对象一样的原理;
所以i03==i04的结果为false;
(3)
System.out.println(i01==i04);//false
Integer i01 = 12;
Integer i04 = new Integer(12);
该原理与(2)一样;
(4)
System.out.println(i02==i04);//true
int i02 = 12;
Integer i04 = new Integer(12);
只要Integer(不管是直接赋值法还是new的)和int类型的值进行 == 比较,就会将Integer包装类拆箱为int类型,与(1)一样;
(5)
System.out.println(i01==i03);//true
Integer i01 = 12;
Integer i03 = Integer.valueOf(12);相当于 Integer i03=12;
两个Integer类型进行比较,当创建i01对象时,会将该对象放入IntegerCache.cache中,当创建i03时,因为不是new创建的,所以会引用IntegerCache.cache中的i01对象,所以i01和i03是指向堆中的同一个对象;
所以结果为true;
(6)
System.out.println(i02==i03);//true
int i02 = 12;//基本数据类型
Integer i03 = Integer.valueOf(12);//此处就相当于是Integer i03 =12;
原理和(1)相同;
综上所述:
(1)对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象;
(2)只要Integer(不管是直接赋值法还是new的)和int类型的值进行 == 比较,就会将Integer包装类拆箱为int类型;
最后
以上就是迅速凉面为你收集整理的Integer和int类型值比较的全部内容,希望文章能够帮你解决Integer和int类型值比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复