Java里方法的參數傳遞方式只有一種:值傳遞。
Java中參數傳遞的都是參數值
下面從兩個維度來看
1、傳遞的參數是8種基本數據類型
這個比較好理解,8種基本數據類型,作為參數時,可以理解為原來的一個副本,作為方法內的局部變量,存儲在方法棧中。
副本值的改變,對原始值無任何影響。
2、傳遞的參數是對象引用類型
很多人可能有一個誤解,認為java中對象作為參數時,傳遞的是引用,其實不然。
在java中的設計模型中,一個對象可以拆分成兩部分,一個是指向對象的變量名,一般存儲在棧中,
一個是真正的對象內容,存儲在堆中。
具體模型如下圖:

所以對象作為參數時,傳遞的也是值,只不過這個值有點特殊,是對象的引用地址,即棧內存里面的變量所指向的地址值
附 代碼demo
/**
* 描述 : 測試java中數據的傳遞
*
*
* @Author : zhanghao
* @Time : 2019/12/19 18:31
*/
public class Test {
public static void main(String[] args) {
Test test=new Test();
//1、測試基本數據類型
int basicVal=1;
System.out.println("參數前 basicVal:"+basicVal);
test.basicDataTypeParam(basicVal);
System.out.println("參數后 basicVal:"+basicVal);
//2、測試引用類型參數
Student stu=new Student("張三");
System.out.println("參數前 stu.name:"+stu.getName());
test.referDataTypeParam(stu);
System.out.println("參數后 stu.name:"+stu.getName());
//3、測試引用數組
Integer[] arrInt=new Integer[10];
arrInt[0]=123;
System.out.println("參數前 arrInt.length:"+arrInt.length);
System.out.println("參數前 arrInt[0]:"+arrInt[0]);
test.referArrayParam(arrInt);
System.out.println("參數后 arrInt.length:"+arrInt.length);
System.out.println("參數后 arrInt[0]:"+arrInt[0]);
//4、其它常用引用類型 如字符串 String
String strVal="2008年,北京歡迎你";
System.out.println("參數前 strVal:"+strVal);
test.referStrParam(strVal);
System.out.println("參數后 strVal:"+strVal);
}
/**
* 測試字符串引用類型
*
*
* @param strVal
*/
private void referStrParam(String strVal) {
strVal="2020年,北京歡迎你";
}
/**
* 測試引用數組 同時改變參數值,並為參數重新賦值
*
* @param arrInt
*/
private void referArrayParam(Integer[] arrInt) {
arrInt[0]=456;
arrInt=new Integer[20];
}
/**
* 測試引用數據類型
*
* @param stu
*/
private void referDataTypeParam(Student stu) {
stu.setName("李四");
}
/**
* 測試基本數據類型參數
*
* @param basicVal
*/
private void basicDataTypeParam(int basicVal) {
basicVal=2;
}
/**
* 描述 : 學生類實體
*
* @Author : zhanghao
* @Time : 2019/12/21 19:22
*/
public class Student {
String name;
public Student(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
