使用JSONObject,您可以:
JSONObject.NULL.equals(null); //returns true
JSONObject.NULL
打破Object.equals()
合同,至少看起来像是这样,因为
对于任何非空引用值x,x.equals(null)应返回false
这个类被如此广泛使用和支持的事实使我认为没有违规由于某种原因,是吗?
答案 0 :(得分:1)
NULL-Object是一种模式,用于避免string
之类的检查。
这是一回事。 if(object == null)
只是一个名字。但是你真正拥有的不是NULL
(null-reference),而是一个提供默认行为(非空引用)的对象。
答案 1 :(得分:1)
它明显违反了Object.equals(),因为
Object()
true
而非false
JSONObject.NULL
的内容如下所示&该值不为空。
public static final Object NULL = new Object() {
@Override public boolean equals(Object o) {
return o == this || o == null; // API specifies this broken equals implementation
}
@Override public String toString() {
return "null";
}
};
来自equals()
的 Object
似乎是
public boolean equals(Object o) {
return this == o;
}
如果我们传递 null ,JSONObject.NULL
equals()
方法中 o == null 的额外比较将始终返回true
。因此
JSONObject.NULL.equals(null); //Will return true