基本概念区分:
1、Integer是int的包装器,int是java的基本数据类型2、Integer变量必须实例化才能使用,Integer变量3、Integer实际上不需要是对对象的引用,而是new的intenter int直接存储数据值4,整数的默认值为空,整数的默认值为0
Integer、new Integer ()与int的比较
如果比较1、2个new Integer ()变量,则始终为false。 因为new生成两个对象,存储器地址不同
整合者
i=
新
整合者
(
100
);
整合者
j=
新
整合者
(
100
);
系统。
出局。
打印
(i==j );
//false
2、Integer变量和new Integer ()变量的比较,总是为false。 内存中的地址不同,因为Integer变量是指java常量池中的对象,而new Integer ()变量是指堆中新创建的对象。
整合者
i=
新
整合者
(
100
);
整合者
j=
100
;
系统。
出局。
打印
(i==j );
//false
3、比较两个Integer变量,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在该区间,则比较结果为false。
整合者
i=
100
;
整合者
j=
100
;
系统。
出局。
打印
(i==j );
//true
整合者
i=
128
;
整合者
j=
128
;
系统。
出局。
打印
(i==j );
//false
分析: Integer i=100在编译时翻译为IntegerI=integer.valueOf(100 ),但java将integer型的valueof定义如下:
公共汽车
静态
整合者
值为(
英特尔公司
I ) {2}
声明
整合缓存
. high=
127
;
国际航空运输协会
(i=
整合缓存
. low i=
整合缓存
. high ()。
返回
整合缓存
. cache[I(-
整合缓存
. low );
}
返回
新
整合者
(I;
}
java缓存-128到127之间的数字。 因此,如果Integer i=127,则缓存127,然后写入Integer j=127,则直接从缓存中获取,不会成为new。
4、在比较int变量和Integer、new Integer ()时,只要两个值相等,true在比较包装类Integer和基本数据类型int时,java会自动包装成int后进行比较,所以实际上是两个int变量的比较
整合者
i=
新
整合者
(
100
);
//自动开箱为int i=100; 这相当于两个int的比较
英特尔公司
j=
100
;
系统。
出局。
打印
(i==j );
//true
示例1 :
公共汽车
等级
整合示范法
{
公共汽车
静态
void
main (
斯廷格
]阿RGS
英特尔公司
i=
128
;
整合者
i2=
128
;
整合者
i3=
新
整合者
(
128
);
系统。
出局
. println (
' i==i2='
(i==i2);
//Integer会自动与int开箱,因此为true
系统。
出局
. println (
' i==i3='
(i==i3);
//true,理由相同
整合者
i4=
127
;
//在编译时,翻译为integerI4=integer.valueof(127 )。
整合者
i5=
127
;
系统。
出局
. println (
' i4==i5='
(i4==i5);
//true
整合者
i6=
128
;
整合者
i7=
128
;
系统。
出局
. println (
' i6==i7='
(i6==i7);
//false
整合者
i8=
新
整合者
(
127
);
系统。
出局
. println (
' i5==i8='
(i5==i8);
//false
整合者
i9=
新
整合者
(
128
);
整合者
i10=
新
整合者
(
128
);
系统。
出局
. println (
' i9==i10='
(i9==i10 );
//false
}
}
答案是
I==I2=真
I==i3=真
i4==i5=真
i6==i7=假
i5==i8=假
i9==i10=假
示例2 :
软件包
demo1.demo1;
公共类公司
publicstaticvoidmain (字符串[ ]数组) {
integera=新integer (127、
b=新整数(128;
int c=127、
d=128,
dd=128;
整数e=127、
ee=127,
f=128,
ff=128;
system.out.println(a==b );
//false是a、b都出现new的对象,由于地址不同,所以为false
系统输出打印(a==c );
//true a将自动开箱为int型
系统输出打印(a==e );
//false所指地址不同的a是从new中出来的
系统输出打印(e==c );
//true e将自动开箱为int型
system.out.println(e==ee );
//true Integer对位于-128到127的范围内,指向同一地址区域
系统输出打印(b==f );
//false所指地址不同的b是从new中出来的
system.out.println(f==d;
//true f自动开箱为int型
系统输出打印机(f==FF );
/*
* false不指向同一地址区域。
在Integer类型中,- 128到127存储相同的本地地址。
* * *其他数量为存储留出了其他空间
*/
系统输出打印(d==DD );
//true不作说明
}
}
示例3 :
整合者
i01=
59
;
英特尔公司
i02=
59
;
整合者
i03=
整合者
. valueOf (
59
);
整合者
i04=
新
整合者
(
59
);
以下输出结果为false :
系统。
出局
. println(I01==I02 );
系统。
出局
. println(I01==I03 );
系统。
出局
. println(I03==I04 );
系统。
出局
. println(I02==I04 );
分析:
i01==i02。 I01.intvalue(I02两个值的比较5959 --true; i01==i03。 i01和i03赋值操作返回相同的对象,因为59介于-128和127之间。 都是从chche返回的同一对象,对象地址相同,为true; i03==i04。 i03是来自缓存的值,i04是新的新对象,两者不是同一对象,所以为false。 i02==i04。 和第一个很像。 真。 答案是c。
示例4 :与示例3的唯一区别是,将所有值更改为128。
整合者
i01=
128
;
英特尔公司
i02=
128
;
整合者
i03=
整合者
. valueOf (
128
);
整合者
i04=
新
整合者
(
128
);
以下输出结果为false :
系统。
出局
. println(I01==I02 );
系统。
出局
. println(I01==I03 );
系统。
出局
. println(I03==I04 );
系统。
出局
. println(I02==I04 );
回答:
真
假的
假的
真