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));
答案 0 :(得分:1)
在Java中,测试
if (i==f && i.equals(f))
是荒谬的。由于i
是Integer
且f
是Float
,因此它们永远不会是==
(因为它们是不相称的类型,因此无法合法地与==
)。对于引用类型,仅当变量引用相同的对象时,==
运算符才会求值为true
,而对于不同类型的对象,它们不能这样做。因此,由于i==f
的计算结果为false
,所以第二部分永远不会被评估,因为&&
运算符是一个“短路”布尔运算符。
我认为如果i
和f
属于其他类型,这可能是检查类的equals()
方法是否具有反身性的方法(根据规范要求,但有总是编程错误)。但是,拥有它会更有意义:
if (i != null && i.equals(f))
避免潜在的NullPointerException
。
答案 1 :(得分:-1)
String a=new String("sag");
String b=new String("sag");
System.out.println("a == b returns " +(a == b)+ " and equals returns " + a.equals(b));
答案是:假,是吗?正确