在阅读源代码时HashMap,我遇到了以下代码public V put(K key, V value):
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么分配e.key到k比较?为什么不直接比较,如:
if (e.hash == hash && (e.key == key || key.equals(e.key))
Run Code Online (Sandbox Code Playgroud)
-------------------更新------------------------
根据@seand的回答,我做了更详细的调查:
import com.test.Test;
public class Main {
public static void main(String[] args) {
Test t …Run Code Online (Sandbox Code Playgroud) 我试图在jdk源代码中找到javax.servlet包的源代码,但似乎jdk不包含该包.我在哪里可以下载包裹?
我在阅读Thinking in java,Generics.在一个例子中(在"边界的行动"段落)
public class GenericHolder<T> {
private T obj;
public void set(T obj) { this.obj = obj; }
public T get() { return obj; }
public static void main(String[] args) {
GenericHolder<String> holder =
new GenericHolder<String>();
holder.set("Item");
String s = holder.get();
}
} ///:~
public void set(java.lang.Object);
0: aload_0
1: aload_1
2: putfield #2; //Field obj:Object;
5: return
public java.lang.Object get();
0: aload_0
1: getfield #2; //Field obj:Object;
4: areturn
public static void main(java.lang.String[]);
470 Thinking in Java Bruce …Run Code Online (Sandbox Code Playgroud)