Java 基礎 - 基本類型vs引用類型,傳值vs傳引用


傳值 vs 傳引用

傳值

就是把實參(a)這個復制傳參(b),因此之后的修改都是對傳參的修改,和實參無關。

public void main(){
    int a = 1;
    change(a);

}

public void change(int b){
    b = 2;
}

  

傳引用

依然是把實參(a)引用復制傳參(b).

  

Integer,Double,String特殊引用類型

由於Integer, String等類中,代表value的變量被聲明為final,也就是說一旦被初始化value,則不能再被改變。

所以,一旦當傳參b被賦予一個新的Integer,或者“試圖改變”它的值,實際上都是賦予b一個新的Integer Object.

public void main(){
    Integer a = new Integer(1);
    change(a);

}

public void change(Integer b){
    b = 2;
}

  

  

普通引用類型

public void main(){
    User a = new User("cx");
    change(a);

}

public void change(User b){
    b.setName("gh");
}

 

 

基本概念

ref: https://www.cnblogs.com/ysocean/p/8482979.html#_label2

這里再給大家普及一個概念,在 Java 中基本類型和引用類型的區別。

  在 Java 中數據類型可以分為兩大類:基本類型和引用類型。

  基本類型也稱為值類型,分別是字符類型 char,布爾類型 boolean以及數值類型 byte、short、int、long、float、double。

  引用類型則包括類、接口、數組、枚舉等。

  Java 將內存空間分為堆和棧。基本類型直接在棧中存儲數值,而引用類型是將引用放在棧中,實際存儲的值是放在堆中,通過棧中的引用指向堆中存放的數據。

  

上圖定義的 a 和 b 都是基本類型,其值是直接存放在棧中的;而 c 和 d 是 String 聲明的,這是一個引用類型,引用地址是存放在 棧中,然后指向堆的內存空間。

下面 d = c;這條語句表示將 c 的引用賦值給 d,那么 c 和 d 將指向同一塊堆內存空間。


免責聲明!

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



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