值傳遞和引用傳遞的區別


先說變量

Java中有基礎變量(8種基本數據類型的)和引用變量(除了8種基本數據類型之外的, 一般指的是對象類型的變量, 也稱引用)。

注意:String也是對象類型的一種,但它作為一種比較常用的數據類型, 較於純粹的對象類型還有不同之處。

再說字面值

字面值指的是某個類型的合法取值, 或者說,可以為該類型的變量賦值的數據。

例如, “int a = 5;”,  a就是變量, 5就是字面值。

eg1:

  Int a = 10;

  int b = a; // a的字面值賦值/傳遞給b

  // 此時輸出a、b字面值皆是10

  b  = 20; // b的字面值賦值為20

  // 此時輸出b字面值為20,a字面值仍舊是10

總結:

【值傳遞不影響傳遞的另一方數據(a)】

然后是引用中存的不是數值那是啥?

對於基本變量而言,其中存儲的是值,而引用(可以看作指針)中存放的是?

對於對象類型來說,在計算機中, 對象本質上是一塊內存區域(內存塊),每一塊兒內存塊兒,都會有它的首地址,引用就是指向了這個首地址.(可以稍稍看下計算機原理)

所以,引用中保存的就是對象在內存中的首地址。

有一點要明確,引用中所保存的對象的首地址,有別於真正的對象,我們可以通過引用來操作一個對象。

最后說一下什么是多個引用指向同一個對象

class MyValue{

  int value;

}

public class TestMyValue{

  public static void main(String args[]){

    MyValue mv1 = new MyValue();// 此時value屬性默認值為0

    mv1.value = 100;// 此時設置value屬性值為100

    MyValue mv2 = mv1;// 將mv1的值傳給mv2,由於mv1中存儲的是對象的首地址,故mv2也指向了相同的對象首地址

    mv2.value = 200;// 改變對象的value屬性值為200

    System.out.println(mv1.value);// 結果是200 ,原因是mv1引用和mv2引用指向了同一塊內存數據(對象),mv1引用和mv2引用都有修改的權利, 先然數據被mv2引用修改為200。

  }

}

總結:

【引用傳遞有可能會改變另一方,應該說是一起變化的(mv1和mv2)】


免責聲明!

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



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