为什么5.0 == 5L给我一个真实的回报?

时间:2015-01-10 19:41:15

标签: java equality

System.out.println(" answer is " + (5.0==5L));

这会返回true! 它应返回false值,因为正在比较两种不同的类型。 即使将doublelong值进行比较!

3 个答案:

答案 0 :(得分:9)

这两个操作数按照JLS section 5.6.2进行二进制数字提升,以获得两个操作数的单一类型。

规则是这样的:

  
      
  • 如果任何操作数属于引用类型,则进行拆箱转换(第5.1.8节)。
  •   
  • 应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:      
        
    • 如果任一操作数的类型为double,则另一个操作数将转换为double
    •   
    • ...
    •   
  •   
  • ...
  •   

您的第二个操作数的类型为double,因此long值会隐式转换为double,然后比较两个double值 - 它们相等

答案 1 :(得分:4)

longdouble进行比较时,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