java方法间传递对象,操作对象地址无效

博客探讨了在Java中,方法间通过地址传递对象时,仅操作地址而不修改对象内部值的情况。示例展示了即使在方法内部交换了对象引用,原始对象的引用并未改变,强调了每个栈帧保存的是对象的引用而非副本。此外,还展示了数组在方法内的作用,说明局部变量的作用域限制。
摘要由CSDN通过智能技术生成

方法间传递对象,在方法内部只操作地址,不修改对象内部的字段等的值,则为无效操作。

原因为:每个栈中都存有一份地址

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值