java學習:虛擬機器對於方法中引數為類型別的如何處理的

andy888168發表於2019-10-11

java學習:虛擬機器對於方法中引數為類型別的如何處理的

 

 

根據你的問題描述,我感覺你並不是要問java虛擬機器中類載入過程,而是想知道虛擬機器對於方法中引數為類型別的如何處理的。

首先,對於你理解的方法引數型別為double,然後傳入的是byte,但是在方法中以double型別處理了,你描述的理解基本是正確的。但是基本資料型別一般在棧裡,不是堆裡。

其次,如果是類型別的話,其實在方法中引數傳遞叫引用傳遞,而你上面說的基本資料型別是值傳遞,所以這是不同的處理方式。

簡單來說:基本資料型別傳遞的是值,所以在方法中操作了跟原來傳入的資料無關。

例如:

public static void change( double n){
    n = 5 ;
}

public static void main(String[] args) {
     byte m = 3 ;
     change (m);
    System. out .println(m); // 此處m並不會變成5,因為是值傳遞
}

 

而類型別一般是引用傳遞,在傳遞的時候只是將物件的指標傳遞過來了,實際上還是操作的原來的物件,所以也不會重新分配空間。

class Student{
    String name ;
     int id ;
   }

 

public static void change(Student student){
    student. name = "HanMeimei" ;
}

public static void main(String[] args) {
    Student student = new Student();
    student. id = 1 ;
    student. name = "LiLei" ;
     change (student);
     // 此處name是HanMeimei,因為此處為引用傳遞,只是將student物件的地址傳遞到了change方法中,
    // 所以在change方法中改變了name的值,此處也會改變
     System. out .println(student. name );
}

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947096/viewspace-2659534/,如需轉載,請註明出處,否則將追究法律責任。

相關文章