为什么Object == null有效?

时间:2017-04-21 01:53:16

标签: java object

因此,当我们比较对象时,我们使用equals()方法或if语句中的类似方法。如果我们有以下代码

String a = "foo";
String b = "foo";
return a==b

我们会将错误返回给我们,因为a和b引用不同的对象。另一方面,

String a = null;
return a == null

我们会成真。那是为什么?

4 个答案:

答案 0 :(得分:5)

  

为什么start_urls有效?

这并不意味着什么。对象不是Java中的值。你不能写那个。所有你能写的都是Object == null

  

所以当我们比较对象时

我们不是。往上看。我们正在比较参考文献。

  

我们在if语句中使用equals()方法或类似的东西。如果我们有以下代码

someObjectReference == null
  

我们会将错误返回给我们,因为a和b引用不同的对象。

不,我们不会,也不会。它会返回true。试试吧。字符串文字由Java汇集。只有一个String a = "foo"; String b = "foo"; return a==b 对象。

  

另一方面,

"foo"
  

我们会成真。那是为什么?

因为引用String a = null; return a == null 的值为null,所以a运算符的RHS上的表达式值也是如此。等值=> ==的结果为==。请注意,true是引用,而不是对象。

答案 1 :(得分:4)

因为两个不同的引用可以指向相同的内容。然后对象相等,但引用仍然不同。

但是当引用相同时,我们只会有一个引用。

鉴于你的例子:

Object o = new Object();
Object o2 = o;
return  o == o2

会导致?!

答案 2 :(得分:2)

我认为null表示一个变量,它不指向堆内存中的任何内容。因此,如果a = null,则a == null返回true是合理的,因为a不指向任何内容,也是null。 / p>

答案 3 :(得分:0)

此外,

String s1 = new String("test");
String s2 = "test";
String s3 = null;

检查:

s1 instanceof String // true, s1 is String object and we allocated a memory to it.
s2 instanceof String // true, s2 is String object and we allocated a memory to it.
s3 instanceof String // false, because we did not allocate memory to object of String s3

s1 == null           // false, we allocated a memory to the String object s1
s2 == null           // false, we allocated a memory to the String object s2
s3 == null           // true, because even though s3 is of reference type String, it is null

注意:

s3 instanceof null   // Invalid: as instanceof checks from class name. null is not a class