程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 入門基礎 Java參數傳遞方式

入門基礎 Java參數傳遞方式

編輯:JAVA編程入門知識

       其實這個問題我原來翻譯(破除Java神話之二:參數是傳址的 )、轉帖別人的具體解釋(Java 應用程序中的按值傳遞語義 )和專門解釋( 我對《Java 應用程序中的按值傳遞語義》的理解 )過,不過現在看來,原來翻譯或者解釋的角度是有問題的,從底層的角度解釋並不直觀,在交流的時候也輕易引起誤解,最終不能達成一致意見。下面以最終的效果來解釋參數的傳遞方式:

  1、對於原始數據類型,也就是int、 long、char之類的類型,是傳值的,假如你在方法中修改了值,方法調用結束後,那個變量的值沒用改變。
  2、對於對象類型,也就是Object的子類,假如你在方法中修改了它的成員的值,那個修改是生效的,方法調用結束後,它的成員是新的值,但是假如你把它指向一個其它的對象,方法調用結束後,原來對它的引用並沒用指向新的對象。
  代碼如下:
  public class Tester {
      public static void main(String[] args) {
          int primitive = 2;
          changePrimitive(primitive);
          //primitive的值依然是2
          MyClass myClass = new MyClass();
          changeObject(myClass);
          //myClass仍然指向的是執行changeObject之前的那個對象
          //但是myClass.i等於3了
      }

      public static void changePrimitive(int primitive) {
          primitive = 3;
      }

      public static void changeObject(MyClass myClass) {
          myClass.i = 3;
          myClass = new MyClass();
      }
  }

  class MyClass {
      int i;
  }

      對於遠程調用,無論是什麼類型,調用結束後,傳入的參數和以前沒用任何變化(當然前途是直接調用遠程方法,假如中間經過其它的Proxy類或者Facade類,不能保證那些類對對象沒用修改)。至於是通過Local接口進行調用的,也應該屬於本地調用,和上面說的情況應該是一致的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved