System.out.println(" answer is " + (5.0==5L));
这会返回true
!
它应返回false
值,因为正在比较两种不同的类型。
即使将double
与long
值进行比较!
答案 0 :(得分:9)
这两个操作数按照JLS section 5.6.2进行二进制数字提升,以获得两个操作数的单一类型。
规则是这样的:
- 如果任何操作数属于引用类型,则进行拆箱转换(第5.1.8节)。
- 应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:
- 如果任一操作数的类型为
double
,则另一个操作数将转换为double
。- ...
- ...
您的第二个操作数的类型为double
,因此long
值会隐式转换为double
,然后比较两个double
值 - 它们相等
答案 1 :(得分:4)
将long
与double
进行比较时,long
会提升为double
,然后将两者进行比较。由于两者都等于5,因此结果为true
。
答案 2 :(得分:2)
它返回true,因为它正在比较两种类型的“原始变量”。如果它们是相同的值,它就可以工作。
相比之下,如果引用属于同一个对象,则在“对象变量”上使用“==”会返回true,例如
Object a = new Object();
Object b = a;
//then a==b is true
可是:
Object a = new Object();
Object b = new Object();
//then a==b is false