2.3.Java 傳值還是傳引用

這是一個(gè)經(jīng)典的面試問(wèn)題,混淆了新手Java開(kāi)發(fā)人員。在這篇文章中,我將用例子和圖來(lái)演示:Java是按照值傳遞。

1. 一些定義

傳遞值:在存儲(chǔ)器中復(fù)制傳入的實(shí)際參數(shù)值。
傳遞引用:傳遞復(fù)制實(shí)際地址的副本。

Java 總是傳遞值。原始數(shù)據(jù)類型和對(duì)象引用都只是值。

2. 傳遞原始類型變量

因?yàn)镴ava是傳值的,所以不難理解下面的代碼不會(huì)交換任何值。

swap(Type arg1, Type arg2) {
    Type temp = arg1;
    arg1 = arg2;
    arg2 = temp;
}

3.傳遞對(duì)象變量

Java通過(guò)引用來(lái)操作對(duì)象,所有的對(duì)象變量都是引用。但是,Java不會(huì)通過(guò)引用傳遞方法參數(shù),而是通過(guò)值。
問(wèn)題:為什么對(duì)象的成員值會(huì)可以改變?

代碼示例

代碼:

class Apple {
    public String color="red";
}
 
public class Main {
    public static void main(String[] args) {
        Apple apple = new Apple();
        System.out.println(apple.color);
 
        changeApple(apple);
        System.out.println(apple.color);
    }
 
    public static void changeApple(Apple apple){
        apple.color = "green";
    }
}

由于原始和拷貝引用都指向相同對(duì)象,所以成員值會(huì)改變。

傳遞引用示意圖

輸出:

red
green
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容