我查看了源代码java.util.HashMap并看到了以下代码:
public Set<K> keySet() {
Set<K> ks;
return (ks = keySet) == null ? (keySet = new KeySet()) : ks;
}
Run Code Online (Sandbox Code Playgroud)
(Windows,java版"1.8.0_111")
在我的MacBook上它看起来像这样:
public Set<K> keySet() {
Set<K> ks = keySet;
if (ks == null) {
ks = new KeySet();
keySet = ks;
}
return ks;
}
Run Code Online (Sandbox Code Playgroud)
(MacOs X Sierra,java版"1.8.0_121")
为什么两个变体都声明了局部变量ks?为什么不这样写:
public Set<K> keySet() {
if (keySet == null) {
keySet = new KeySet();
}
return keySet;
}
Run Code Online (Sandbox Code Playgroud)
要么
public Set<K> keySet() {
return keySet == null ? (keySet = …Run Code Online (Sandbox Code Playgroud) java ×1