Java语言中的方法参数——值传递与引用传递

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013233360/article/details/78127756

Java语言中的方法参数有两种:

1、基本数据类型(数字、布尔值)

2、对象引用


基于方法参数的传递有两种方式:值传递和引用传递

值传递表示方法接收的是调用者提供的值。

引用传递表示方法接收的是调用者提供的变量地址。

Java程序设计语言总是采用按值传递的方式,也就是说,方法得到的是所有参数值的一个拷贝,特别是方法不能修改传递个它的任何参数变量的内容。


先用基本数据类型作为参数来举个栗子:

扫描二维码关注公众号,回复: 5095863 查看本文章

public static void methodA(double i){

i = 3 * i;

System.out.println(i);

}


double i = 3.0;

methodA(i);

System.out.println(i);


将 i 作为参数传递至methodA方法中,此时的 i 是作为参数值的一个拷贝,属于值传递,那么调用者和被调用者是两个不同的变量,方法体里面对变量的改变,不会影响方法体外面的变量。


如果将实例对象作为参数进行传递:

public static void plus(carc){

     c.setPrice(c.getPrice() * 3);

}

    car c = new car(3.0);

    plus(c);

    System.out.println(c.getPrice());


将car的实例对象c作为参数传递至plus方法中,此时的 c 对象是作为参数值的一个拷贝,属于引用传递,那么调用者和被调用者用的是相同的变量,如果在方法体内部对变量进行修改,会影响方法体外的变量。


那么实例对象作为参数进行传递,就是属于引用传递吗?这里可做一个反例来说明。


  public staticvoid changeName(carc){

    c = new car();

    c.setName("奔驰");

    }

    car c = new car();

    c.setName("奥迪");

    changeName(c);

    System.out.println(c.getName());


将实例对象car传入changeName方法中,c作为拷贝对象进行传递,方法中对c实例再次进行实例化,并且赋予参数状态,方法中的c对象更改属性状态,并不会影响方法外的c实例属性,changeName方法结束后,方法中的c实例便会被废弃掉,所以最终会输出“奥迪”。

表明方法中如果对象作为参数的话,属于值传递,并非引用传递。


总结:

方法不能修改一个基本类型的参数(即数值型和布尔型)

方法可以改变一个对象参数的状态

方法不能让对象参数引用一个新的对象  



猜你喜欢

转载自blog.csdn.net/u013233360/article/details/78127756
今日推荐