【问题标题】:What does this expression evaluate to? [closed]这个表达式的计算结果是什么? [关闭]
【发布时间】:2014-11-06 06:17:44
【问题描述】:
Class Wrapper{

  psvm(){

  Integer i=new Integer(5);
  Float f=new Float(5);

  }
}

如果 (i==f && i.equals(f))// 第一个表达式的计算结果为 ????第二个表达式的计算结果为???

 System.out.println("i == f returns " + (i == f) + " and equals returns " + i.equals(f)); 

【问题讨论】:

  • 你到底在问什么?
  • 你为什么不试试呢?
  • 您有一份打印声明。为什么不使用它?
  • 我想知道 == 和 equals 在这种情况下是如何工作的?
  • @SagarByali 在 Java1.7 中代码无法编译:Incompatible operand types Integer and Float。所以这个语句不能被评估。

标签: java operators


【解决方案1】:

在 Java 中,测试

if (i==f && i.equals(f))

是荒谬的。由于iIntegerfFloat,它们永远不会是==(并且,由于它们是不相称的类型,因此不能合法地与== 进行比较)。对于引用类型,== 运算符仅在变量引用同一个对象时才计算为 true,它们不能对不同类型的对象执行此操作。因此,由于 i==f 的计算结果为 false,因此将永远不会计算第二部分,因为 && 运算符是“短路”布尔运算符。

我想如果if 属于其他类型,这可能是一种检查类的equals() 方法是否具有自反性的方法(按照规范的要求,但总是存在编程错误)。但是,更有意义的是:

if (i != null && i.equals(f))

避免潜在的NullPointerException

【讨论】:

  • 对象 a=new Object("sag");对象 b=new Object("sag"); System.out.println("a == b 返回 " + (a == b) + " 和 equals 返回 " + a.equals(b));答案是:假,假??正确
  • @SagarByali - 是的。由于ab 是不同的对象,因此a==b 的计算结果为falseObject类提供的equals()的实现只是简单的返回==的结果,所以false也会返回。
【解决方案2】:
String a=new String("sag"); 
String b=new String("sag"); 

System.out.println("a == b returns " +(a == b)+ " and equals returns " + a.equals(b)); 

答案是:错误,正确??正确

【讨论】:

  • a == b 返回 false,equals 返回 true
  • 问题不是答案,“正确”一词在使用模糊时也不是。
猜你喜欢
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多