首頁  >  文章  >  web前端  >  Java的call by value和call by reference的詳細介紹

Java的call by value和call by reference的詳細介紹

不言
不言轉載
2019-03-16 10:41:343704瀏覽

這篇文章帶給大家的內容是關於Java的call by value和call by reference的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

題目如下:

Java的call by value和call by reference的詳細介紹

Java傳參的兩種方式

  1. call by value(值傳遞):傳遞的是值(針對基本資料型別),如傳遞一個整數數值。實際上,按值傳遞在方法呼叫方法中,參數只是實際參數的一份拷貝。
  2. call by reference(引用傳遞):傳遞的是物件的參考(針對物件),即傳遞的是物件的位址。實際上,引用按傳遞時候會產生一份新的引用拷貝,新舊兩份引用同時指向同一個位址。

程式碼範例

public class TestJavaCallBy {

    // 测试值传递
    public static void testCallByValue(int value) {
        value *= 10;
    }

    // 测试引用传递
    public static void testCallByReference(StringBuilder sb) {
        sb.append(" - " + ZonedDateTime.now());
    }

    public static void main(String[] args) {

        // 测试值变量
        int param = 1;
        // 测试引用对象
        StringBuilder sb = new StringBuilder("666");

        // 测试
        System.out.println(param);
        testCallByValue(param);
        System.out.println(param);

        System.out.println(sb.toString());
        testCallByReference(sb);
        System.out.println(sb.toString());
    }
}

控制台输出结果
1
// 结果仍为1,因为参数传递的是实参的一份拷贝,对实参不造成影响
1 

666
// 传递的是引用的拷贝,新旧两个引用指向同一个对象(地址),因此append操作是作用在该对象上
666 - 2019-03-16T01:25:57.933038500+08:00[Asia/Shanghai]

那麼就能下結論:

  1. #call by value不會改變實參的值
  2. call by reference不能改變實參的參考地址
  3. call by reference能改變實參的內容

那麼這題的答案就是這樣。

以上是Java的call by value和call by reference的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除