Java参数传递的方式

在参数传递的过程中,Java采用的只有一种方式,那就是值传递。除了基本类型的参数外,传递的都是对象的引用。

package constructor;

public class ArgumentTest {
    private String str;
    
    public ArgumentTest(String str) {
        this.str = str;
    }
    
    public String getStr() {
    
        return str;
    }

    public void setStr(String str) {
    
        this.str = str;
    }
    
    public String toString() {
        return "ArgumentTest:" + str;
    }

    public static void swap(ArgumentTest arg1, ArgumentTest arg2) {
        ArgumentTest temp = arg1;
        arg1 = arg2;
        arg2 = temp;
        System.out.println(arg1.toString());
        System.out.println(arg2.toString());
    }
    
    public static void main(String[] args) {
        ArgumentTest a = new ArgumentTest("aaaaa");
        ArgumentTest a1 = a;
        ArgumentTest b = new ArgumentTest("bbbbb");
        System.out.println("###########");
        System.out.println(a.toString());
        System.out.println(a1.toString());
        System.out.println(b.toString());
        System.out.println("###########");
        swap(a, b);
        System.out.println("###########");
        System.out.println("After: ");
        System.out.println(a.toString());
        System.out.println(b.toString());
    }
}
运行结果为:

###########
ArgumentTest:aaaaa
ArgumentTest:aaaaa
ArgumentTest:bbbbb
###########
ArgumentTest:bbbbb
ArgumentTest:aaaaa
###########
After: 
ArgumentTest:aaaaa
ArgumentTest:bbbbb


从结果可以看出,在swap()方法中,两个参数确实发生了交换。但是最终的结果却并没有因此改变。事实上,传入swap()的两个参数只是引用a和b的副本,即arg1和a指向堆上的同一个对象,arg2和b同时指向堆中的另一个对象。调用swap()函数,令arg1和arg2的指向发生了互换。但是在方法调用结束以后,arg1和arg2就会被自动销毁。而a和b的指向却没有任何变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值