首页 > 编程知识 正文

面试==和equals的区别(compiler和interpreter的区别)

时间:2023-05-05 17:45:02 阅读:86385 作者:298

基本概念区分:

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 );

回答:

假的

假的

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。