2017-08-01 89 views
-8

公共类的测试{//名称为 “测试”这段代码的输出是什么,为什么?请解释MEE

static public void main(String[] args) 
{ 
    Long a=111L; //declaring Long type variable 
    Long b=111L; //declaring Long type variable 
    Long c=222L; //declaring Long type variable 
    Long d=222L; //declaring Long type variable 
    System.out.println((a==b)+" "+(c==d)); /*output is "true false". I dont know Why? Please explain */ 
} 

声明类}

+2

你知道这不是你如何比较对象,对吧? –

+0

你有一个具体的问题,你有困惑的具体点?代码本身是非常基本的,它只是比较一些对象并输出比较结果。 – Zabuza

+0

[将两个对象与.equals()和==运算符进行比较](https://stackoverflow.com/questions/13387742/compare-two-objects-with-equals-and-operator) – jmoerdyk

回答

4

Long是关于原始long的盒装包装。你应该使用long。 将基元与==进行比较,但将类似Long的对象与aLong.equals(otherLong)进行比较;否则,当您与==比较时,您将比较参考平等。 source

一个可能是真的,另一个是错误的原因是因为-128到127被缓存了Source。因此,任何具有111L值的Long的对象都将是同一个对象,但具有222L值的Long将与另一个具有222L值的Long不同。

由于这种不确定性,您应该始终将对象与.equals进行比较,除非您特别想知道它们是否是完全相同的对象。

在这种情况下,我会建议你使用原语并比较原样。

+1

我认为你可以通过链接到SO上的一些答案来改善答案,其中解释1)'等号'和'=='问题以及2)**自动装箱**内容。 – Zabuza

+1

会做@Zabuza – Novaterata