Java里方法的參數傳遞方式


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;
    }
}

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM