首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 與 Java 參數傳遞機制深度對比:值傳遞、引用與指針的本質差異

     編輯:C++ 入門

核心結論先行

Java 僅支援值傳遞(基本型別傳值,物件傳參考的值)。C++ 支援三種:值傳遞、指標傳值(模擬引用)、引用傳遞(真正別名)。

Java 參數傳遞詳解

基本型別 (int 等)

傳遞數值副本,函數內修改不影響外部。

物件型別 (Integer, StringBuffer 等)

傳遞「參考的副本」(記憶體地址值)。

  • 不可變物件:修改參數指向新物件,外部原物件不變。
  • 可變物件:透過參考修改物件內部狀態,外部可見。
// Java 範例
void swap(Integer a, Integer b) { // 僅交換區域參考
    Integer t = a; a = b; b = t;
}
void change(StringBuffer sb) { sb.append(" modified"); } // 修改物件內容,外部可見

C++ 參數傳遞三重奏

1. 值傳遞

建立參數副本(含基本型別、結構體、類別物件)。修改副本不影響原物件。

2. 指標傳值 (Pass-by-value of pointer)

傳遞指標副本。可透過 *ptr 修改指向物件,但無法修改呼叫端指標本身。

void test(int* ptr) { *ptr = 20; } // 修改值
int i = 10; test(&i); // i 變 20

3. 引用傳遞 (Pass-by-reference)

參數成為原變數別名。函數內操作直接作用於原變數,語法最直觀、效率最高。

void swap(int& a, int& b) { int t=a; a=b; b=t; } // 真正交換
int x=1, y=2; swap(x, y); // x=2, y=1

關鍵差異總結表

語言基本型別物件/結構體可否修改實參變數本身
Java值傳遞參考值傳遞不可
C++值/指標/引用值/指標/引用引用/指標可

實務建議

  • C++ 優先使用 const 引用 傳遞大型物件(避免拷貝、防修改)。
  • 需修改實參時使用 非 const 引用。
  • Java 中若需交換物件引用,需改用陣列/容器包裹或返回新物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved