int a = 127;
int b = 127;
System.out.println(a == b); // true -> 基本数据类型按值传递
int a1 = 128;
int b1 = 128;
System.out.println(a1 == b1); // true -> 基本数据类型按值传递
Integer A = 127;
Integer B = 127;
System.out.println(A == B); // true -> 包装类型 value值在 -128 ~ 127 之间的数,不会升级为引用传递
Integer A1 = 128;
Integer B1 = 128;
System.out.println(A1 == B1); // false -> 包装类型 value值在 -128 ~ 127 之间的数,不会升级为引用传递
HashMap<Integer,String> map = new HashMap<>();
map.put(128,"我是128");
map.put(128,"他是128");
System.out.println(map.get(128)); // 他是128,并不会出现 我是128,说明Map中的Integer不管数值多少,是按照值传递
HashMap<ListNode,String> mapReference = new HashMap<>();
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
mapReference.put(node1,"1");
mapReference.put(node2,"2");
// 引用传递,node1 跟 node2 指向两个内存 区域
System.out.println(mapReference.get(node1)); // 1
System.out.println(mapReference.get(node2)); // 2
ListNode node3 = new ListNode(3);
ListNode node4 = node3;
mapReference.put(node3,"3");
mapReference.put(node4,"4");
// 引用传递,node1 跟 node2 指向两个内存 区域
System.out.println(mapReference.get(node3)); // 4
System.out.println(mapReference.get(node4)); // 4
// 按值传递跟引用传递在Hash表中的区别
// 如果 key 是 String 类型,这个 String 如果有 200个字符,那Hash表会key的长度为200字符
// 如果 key 是 Node 类型,这个 Node 里面有String 字段,保存这200字符,那Hash表key的长度为 8字节