Java 值传递还是引用传递问题记录


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字节
posted @ 2023-03-28 23:01  Minde  阅读(21)  评论(0编辑  收藏  举报