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

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

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

2、对象引用

 

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

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

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

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

 

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

 

 

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实例便会被废弃掉,所以最终会输出“奥迪”。

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

 

总结:

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

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

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

更多原创文章请查看地址 https://www.mxblog.com.cn

更多免费互联网架构书籍、大厂技术分享书籍、每年Java经典面试宝典可查看Java经典书籍下载

 

你可能感兴趣的:(Java)