Java参数的值传递(Swap())

参数的值传递:
方法的优点就是其处理参数的能力。值传递就是当调用带参数的方法时,实参传递给形参的过程。在值传递的过程中,如果实参是变量而不是直接量,则将该变量的值传递给形参,无论形参在方法中是否改变,该变量都不会受到影响。
我们以交换函数Swap()为例:
//错误例子

public class TextSwap {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int num1=1;
        int num2=2;
        swap(num1,num2);
        System.out.println("In the main method:"+num1+"and"+num2);
    }
    //交换a和b的值
    public static void swap(int a,int b){
        int temp=a;
        a=b;
        b=temp;
        System.out.println("In the swap method:"+a+"and"+b);
    }
}

运行结果
通过上述方法,并不能得到正确的结果,那是因为main()方法和swap()方法所需的空间是俩个独立的空间,main方法在调用swap方法时,在swap方法的空间里实参num1与num2的值传递给a,b,进行了交换,但并没有改变main函数空间中所定义的num1与num2的值,所以a与b的改变并不能影响num1,num2的值。
在C/C++中有地址引用符号,可以用其来传递变量地址。然而Java语言中并没有地址引用符号,所以通过地址的方式在Java中是不可能实现的,但可以通过其他方式来实现。
1、数组交换值:

public class Swap<T> {     //定义了一个泛型的交换类
    public Swap() {
    }
    **public <T> void swap(T []str,int m,int n){//数组交换值
        T temp=str[m];
        str[m]=str[n];
        str[n]=temp;
    }**
}

只要创建其对象,调用swap()函数就可实现对两个任意类型数值的交换。
2、定义类进行值交换:

public class Swap {
    private int num;
    public Swap() {//构造函数
    }
    public Swap(int num){//构造函数
        this.num =num;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
}
public class TextSwap {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Swap swap1=new Swap(1);         //创建对象
        Swap swap2=new Swap(2);
        swap(swap1, swap2);
        System.out.println(swap1.getNum()+" "+swap2.getNum());
    }
    public static void swap(Swap a,Swap b){    //交换函数
        int a1=a.getNum();
        a.setNum(b.getNum());
        b.setNum(a1);
    }
}

运行结果:
该方法需要类才能得以实现,并不灵活,建议采用数组方式进行数值交换

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值