首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 參數傳遞機制:基本類型傳值、引用類型傳引用值與 PHP 傳址對比

     編輯:Java 綜合教學

Java 參數傳遞機制:傳值 vs 傳引用值

Java **只有傳值**。基本類型傳值副本;引用類型傳引用地址副本(即「傳引用值」)。

Java 範例

public class VariableDemo {
    public static void main(String[] args) {
        int a = 1;
        List<String> list = new ArrayList<>();
        list.add("taoshihan1");

        makeChange(a, list);

        System.out.println(a);    // 1 (未變)
        System.out.println(list); // [taoshihan1, taoshihan2] (物件內容變)
    }
    static void makeChange(int a, List<String> list) {
        a = 4;                    // 修改副本
        list.add("taoshihan2");   // 修改物件內容
    }
}

PHP 對比

PHP 預設傳值,加 & 符號實現傳址:

<?php
function makeChange($a, &$arr) {
    $a = 4;
    array_push($arr, "taoshihan2");
}
$a = 1; $arr = ["taoshihan1"];
makeChange($a, $arr);
echo $a;        // 1
print_r($arr);  // ["taoshihan1", "taoshihan2"]
?>

核心差異總結

語言基本類型引用類型 / 物件傳址支援
Java傳值副本傳引用地址副本不支援 (無 &)
PHP傳值副本傳值副本 (複製物件)支援 &$var
C/C++傳值指標/引用傳址原生支援

記憶體模型解釋

  • JVM 棧存放區域變數(基本值與引用)。
  • 堆存放物件實例。
  • 方法調用時,基本型複製值;引用型複製「指向堆物件的地址」。
  • 在被調用方法中:修改基本參數不影響外部;透過引用參數修改物件內容**可見**;但將參數重新指向新物件(list = new ArrayList())不影響外部引用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved