先說變量
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)】