用于与null比较的局部变量

时间:2014-10-15 21:40:18

标签: java

我找到了一些新的代码练习(在番石榴源代码中)。

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;   
 } 

1 个答案:

答案 0 :(得分:2)

在以下情况下将keySet保留在本地变量result中非常有用:

  • keySet()合同不允许返回null;
  • 同时作者不想保留任何锁定/同步
  • keySet可以设置为null

想象一下keySetvolatile,在检查keySet==nullreturn keySet之间可以将引用设置为null,因此第二种方法有可能返回null。