java中参数的传递

在学java 中发现一个问题就是:如果我想交换两个数或者两个对象那么我该如何实现了?

语言中需要交换两个数时,在函数中代码是这样实现的:

Void swap(int *a, int *b){

Int temp = *a;

*a = *b;

*b = temp;

}

而当我要在java 中做同样的交换了?显然在java 中并没有地址一说,更不用谈这个符号了。因此,个人认为在同一个对象中如果调用swap 方法是无法实现两者之间的调换。

例如:

Public class Person {

Public static void main(String[] args){

Int a = 2, b = 3;

System.out.println(“Before : a = ” + a + “, b = ” + b);

Swap(a,b);

System.out.println(“After : a = ” + a + “, b = ” + b”);

}

Static void swap(int a, int b){

Int temp = a;

a = b;

b = temp;

System.out.println(“End of method : a = ” + a + “, b = ” + b”);

}

}

明显的,这里的和 在经过调换函数后,并没有改变。那么我们就可以这样理解:当方法参数为非引用类型时即基本类型时,调用方法时,传递给方法的是一个值得拷贝,即“值传递”。

方法中变量a , b 的生命周期仅为当调用方法时到方法完成时。

现在验证另一种情况:就是当传递的是对象:

public class TestSwap {

    public static void main(String[] args){

        Person p1 = new Person("zou");

        Person p2 = new Person("zheng");

      System.out.println("调换前 :p1 = " + p1.print() + ", p2 = " + p2.print());

      swap(p1,p2);

      System.out.println("调换后 :p1 = " + p1.print() + ", p2 = " + p2.print());

}

     static void swap(Person p1, Person p2){

         Person temp = p1;

         p1 = p2;

         p2 = temp;

         System.out.println("函数调换后 :p1 = " + p1.print() + ", p2 = " + p2.print());

     }

}

class Person {

    private String name;

    Person(String name){this.name = name;}

    String print(){return name;}

}

验证得知,调换后两对象并没发生改变。由此可以得出结论:当传递的是对象时,在方法中的引用是原始值的一份拷贝,在对方法中的对象变量进行调换时,原始的引用并没有发生改变,当方法结束时,方法中的变量即被全部销毁。由此可知,这里也是“值传递”。

当想改变某个对象里面属性的值时,在方法中是可以实现的。

public class TestSwap2 {

    public static void main(String[] args){

        Person p1 = new Person("zou");

        Modify(p1);

        System.out.println(p1.name);

    }

static void modify(Person p){

    p.name = "zheng";

        System.out.println("End of method: " + p.name);

    }

}

class Person {

    public String name;

    Person(String name){this.name = name;}

    void print(){System.out.println(name);}

}

结果验证了上述的结论,当传递的是对象时,实际传递的是对象引用的一份拷贝,并不是将整个对象传递给方法,所以,方法中的引用值也指向同一个对象,当对对象进行操作时是有效的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值