Java中的参数传递 --Java

时间:2022-02-18 14:35:57

1、基本类型传值,对象类型传地址

按值传递:当将一个参数传递给一个方法时,方法接收的是原始值的一个副本。因此,如果方法修改了该参数,仅改变副本,而原始值保持不变。

按引用传递:当将一个参数传递给一个方法时,方法接收的是原始值的内存地址,而不是值的副本。因此,如果方法修改了该参数,调用代码中的原始值也随之改变。

“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

2、验证基本类型传值

/**
* 基本类型传值
* @author Thanlon
*/
public class PassValAndAddr {
  public void testMethod(int a) {
    a = 5;//对传过来的a赋予新值
    System.out.println("testMethod方法中:a=" + a);
  }

  public static void main(String[] args) {
    PassValAndAddr passValAndAddr = new PassValAndAddr();
    int a = 3;
    passValAndAddr.testMethod(a);
    System.out.println("main方法中:a=" + a);
  }
}

控制台打印:

testMethod方法中:a=5
main方法中:a=3

在接收参数的方法中修改了传递过来的值,但这个值只是原始值的副本,原始值不会发生改变。

3、验证对象类型传地址

PassValAndAddr2 .java:

/**
* 对象类型传递地址
* @author Thanlon
*/
public class PassValAndAddr2 {
  public void passAddr(ObjectA a) {
    a.age = 22;
    System.out.println("传递对象给passAddr方法,对象的age属性值为:" + a.age);
  }

  public static void main(String[] args) {
    PassValAndAddr2 passValAndAddr = new PassValAndAddr2();
    ObjectA objectA = new ObjectA();
    passValAndAddr.passAddr(objectA);
    System.out.println("objectA原始的age值为:" + objectA.age);
  }
}

PassValAndAddr2 .java:

public class ObjectA {
  public int age = 0;
}

控制台打印:

传递对象给passAddr方法,对象的age属性值为:22
objectA原始的age值为:22

在接收参数的方法中修改了传过来的对象的age属性,原来对象的age属性值发生了改变,说明方法接收的是原始值的内存地址,而不是值的副本。

注意:在Java中只有基本类型和按照下面这种定义方式的String类型数据是按值传递,其它的都是按引用传递。

直接使用双引号定义字符串方式:String str = "Java"