编程细节 —— 按值传递、按引用传递(final、const)

  • System.out,out 是 System 类内定义的静态 final PrinterStream 变量;

    public final class System {
        ...
        public final static PrinterStream out = null;
        ...
    }

0. 总论

  • 注意区分 Java 的按值传递和按引用传递,但使用按引用传递时,被调端不会对(没有能力)对调用端造成任何影响,
  • 按引用传递便具备对调用端造成影响的能力,如果在按引用传递的情况下,还想保证不会对调用端产生任何影响,此时便可以使用 final 关键字(C/C++ 则是 const 关键字)修饰参数;

1. 按值传递

当传递的是一个对象时:

class Test{
    private int i = 0;

    public Test(int i) {
        this.i = i;
    }
    // setI, getI
}

public class PassByValue {
    private static void update(Test t) {
        t = new Test(20);   // t.setI(20); 注意二者的区别
        System.out.println(t.getI());
    }

    public static void main(String[] args) {
        Test t = new Test(10);

        System.out.println(t.getI());      // 10
        update(t);                         // 20
        System.out.println(t.getI());      // 10 仍然是 10 
    }
}

当然也可以直接输出对象:

public class PassByValue {
    private static void update(Test t) {
        t = new Test(20);
        System.out.println(t);
    }

    public static void main(String[] args) {
        Test t = new Test(10);
        System.out.println(t);      // details.Test@15db9742
        update(t);                  // details.Test@6d06d69c
        System.out.println(t);      // details.Test@15db9742
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值