Java中参数的传递

来源:互联网 发布:注册中文域名多少钱 编辑:程序博客网 时间:2024/06/05 07:14

        Java的参数是传值还是传引用,到现在也没有一个确切的定论。但是在 thinking in Java一书中,有一句经典的解释:“When you are passing primitives into a method,you get a distinct copy of the primitive.When you are passing a reference into a method,you get a copy of the reference."意思是说,不管java传的是值还是传引用,传递的都是对应的值or引用的副本。

        在Java中,值有两种类型,值类型与引用类型。当传递的是值类型的时候,其实传递的是值的副本,即将自身的值复制传递;当传递的是引用类型的时候,其实传递的是自身指向自己的地址的副本,而非是“自己”这整个对象。

        请看下面两个例子:

例1:

public class Test{
    public static void test(boolean test){
test = !test;
System.out.println("In the test(boolean) : test = " + test);
}

public static void main(String[] args) {
boolean test = true;
System.out.println("Before test(boolean) : test = " + test);
test(test);
System.out.println("After test(boolean) : test = " + test);
}
}

运行结果:

Before test(boolean) : test = true;

In the test(boolean) : test = false;

After test(boolean) : test = true;

可以看出,test方法中改变了传进来的参数值,但对这个参数本身并没有影响,即对main函数中的test没有影响,说明参数类型为值类型时是按值传递的。

若想改变test的参数本身,可为test方法添加返回值类型为Boolean即可。

例2:

public class Test{

public static void test(StringBuffer str){
str.append(",World");
}

public static void main(String[] args) {
StringBuffer string = new StringBuffer("Hello");
test(string);
System.out.println(string);

}

}

运行结果:

Hello,World

可以看出,在调用test方法是,将string作为参数传了进去,string是一个引用类型对象,所以其实穿进去的是string这个对象的地址。通过地址找到对象然后修改了对象的值,对象自然也就发生了变化。



原创粉丝点击