我找到了一些新的代码练习(在番石榴源代码中)。
public Set<K> keySet() {
Set<K> result = keySet;
return (result == null) ? keySet = new KeySet() : result;
}
我的问题是 - 为什么使用局部变量resut与null进行比较?有没有什么优点?
和
不一样 public Set<K> keySet() {
return (keySet== null) ? keySet = new KeySet() : keySet;
}
答案 0 :(得分:2)
在以下情况下将keySet
保留在本地变量result
中非常有用:
keySet()
合同不允许返回null
; keySet
可以设置为null
想象一下keySet
是volatile
,在检查keySet==null
和return keySet
之间可以将引用设置为null,因此第二种方法有可能返回null。