方法间传递对象,在方法内部只操作地址,不修改对象内部的字段等的值,则为无效操作。
原因为:每个栈中都存有一份地址
public static void main(String[] args) { ListNode p = new ListNode(); System.out.println("p = " + p.toString()); ListNode q = new ListNode(); System.out.println("q = " + q.toString()); new Solution7().swap(p, q); System.out.println("after p = " + p.toString()); System.out.println("after q = " + q.toString()); int[] i = new int[7]; new Solution7().a(i); System.out.println(i.toString()); } /** * 关键点为:每个栈中都存有一份地址 * * 栈a * | | * | | * | | * | | * | | * |地址123 | * —————————— * * 栈b(该栈内对地址的操作(其实就是个数),只对该栈内有效) * | | * | | * | | * | | * | | * |地址123 | * —————————— * @param m * @param n */ //无用的操作 public void swap(ListNode m, ListNode n){ System.out.println("swap before m = " + m.toString()); System.out.println("swap before n = " + n.toString()); ListNode temp = m; System.out.println("swap temp = " + temp.toString()); m = n; System.out.println("swap m = " + m.toString()); n = temp; System.out.println("swap n = " + n.toString()); } public void a(int[] x){ x = new int[2]; System.out.println(x.toString()); }
p = ListNode@135fbaa4
q = ListNode@45ee12a7
swap before m = ListNode@135fbaa4
swap before n = ListNode@45ee12a7
swap temp = ListNode@135fbaa4
swap m = ListNode@45ee12a7
swap n = ListNode@135fbaa4
after p = ListNode@135fbaa4
after q = ListNode@45ee12a7
[I@330bedb4
[I@2503dbd3