Java中的引用類型參數(shù)傳值
Java中的引用型數(shù)據(jù)包括數(shù)組,對(duì)象以及接口。而當(dāng)參數(shù)是引用類型時(shí),“傳值”則變成了傳遞變量中的“引用”,而不是變量所引起的實(shí)體。對(duì)于兩個(gè)相同類型的引用型變量,如果具有相同的引用,就會(huì)用同樣的實(shí)體,因
Java中的引用型數(shù)據(jù)包括數(shù)組,對(duì)象以及接口。而當(dāng)參數(shù)是引用類型時(shí),“傳值”則變成了傳遞變量中的“引用”,而不是變量所引起的實(shí)體。對(duì)于兩個(gè)相同類型的引用型變量,如果具有相同的引用,就會(huì)用同樣的實(shí)體,因此,如果改變參數(shù)變量所引用的實(shí)體,就會(huì)導(dǎo)致原變量的實(shí)體發(fā)生同樣的變化,但是,改變參數(shù)中存放的“引用”不會(huì)影響向其傳值的變量中存放的“引用”,反之同樣成立。
引用類型參數(shù)傳值的示例
這里以收音機(jī)使用電池為例,介紹“引用類型參數(shù)”的傳值。我們定義了三個(gè)類:Battery(電池)、Radio(收音機(jī))和E11(主類)。在主類中,我們創(chuàng)建了一個(gè)“收音機(jī)”對(duì)象和一個(gè)“電池”對(duì)象,并調(diào)用其他兩個(gè)類中構(gòu)造的“方法”來(lái)實(shí)現(xiàn)程序功能。
代碼示例
下面是示例代碼:
```java
class Battery {
int electricityAmount;
Battery(int amount) {
electricityAmount amount;
}
}
class Radio {
void openRadio(Battery battery) {
battery.electricityAmount battery.electricityAmount - 10;
}
}
public class E11 {
public static void main(String args[]) {
Battery nanfu new Battery(100);
("南孚電池的儲(chǔ)電量是:" nanfu.electricityAmount);
Radio radio new Radio();
("收音機(jī)開(kāi)始使用南孚電池");
(nanfu);
("目前南孚電池的儲(chǔ)電量是:" nanfu.electricityAmount);
}
}
```
在主類中,通過(guò)Radio類創(chuàng)建一個(gè)“收音機(jī)”對(duì)象,Battery類創(chuàng)建“電池”對(duì)象。當(dāng)調(diào)用`(nanfu)`方法時(shí),我們需要將一個(gè)`Battery`對(duì)象傳遞給該方法的參數(shù)`battery`,即模擬收音機(jī)使用電池。
執(zhí)行上述代碼,輸出結(jié)果如下:
```
南孚電池的儲(chǔ)電量是:100
收音機(jī)開(kāi)始使用南孚電池
目前南孚電池的儲(chǔ)電量是:90
```
可以看到,當(dāng)調(diào)用`openRadio`方法時(shí),傳遞的參數(shù)`nanfu`的`electricityAmount`屬性發(fā)生了變化,因?yàn)榉椒▋?nèi)部修改了參數(shù)變量所引用的實(shí)體。然而,這并不影響到`nanfu`變量本身所引用的實(shí)體。
結(jié)論
在Java中,當(dāng)參數(shù)是引用類型時(shí),傳遞的是變量中的引用,而不是變量所引起的實(shí)體。改變參數(shù)變量所引用的實(shí)體會(huì)影響到原變量的實(shí)體,但是改變參數(shù)中存放的“引用”不會(huì)影響向其傳值的變量中存放的“引用”。這一點(diǎn)在編寫代碼時(shí)需要注意,以免產(chǎn)生意料之外的結(jié)果。