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

按值傳遞

編輯:關於JAVA

首先要解決術語的問題,最適合“按值傳遞”的看起來是自變量。“按值傳遞”以及它的含義取決於如何理解程序的運行方式。最常見的意思是獲得要傳遞的任何東西的一個本地副本,但這裡真正的問題是如何看待自己准備傳遞的東西。對於“按值傳遞”的含義,目前存在兩種存在明顯區別的見解:
(1) Java按值傳遞任何東西。若將基本數據類型傳遞進入一個方法,會明確得到基本數據類型的一個副本。但若將一個句柄傳遞進入方法,得到的是句柄的副本。所以人們認為“一切”都按值傳遞。當然,這種說法也有一個前提:句柄肯定也會被傳遞。但Java的設計方案似乎有些超前,允許我們忽略(大多數時候)自己處理的是一個句柄。也就是說,它允許我們將句柄假想成“對象”,因為在發出方法調用時,系統會自動照管兩者間的差異。
(2) Java主要按值傳遞(無自變量),但對象卻是按引用傳遞的。得到這個結論的前提是句柄只是對象的一個“別名”,所以不考慮傳遞句柄的問題,而是直接指出“我准備傳遞對象”。由於將其傳遞進入一個方法時沒有獲得對象的一個本地副本,所以對象顯然不是按值傳遞的。Sun公司似乎在某種程度上支持這一見解,因為它“保留但未實現”的關鍵字之一便是byvalue(按值)。但沒人知道那個關鍵字什麼時候可以發揮作用。
盡管存在兩種不同的見解,但其間的分歧歸根到底是由於對“句柄”的不同解釋造成的。我打算在本書剩下的部分裡回避這個問題。大家不久就會知道,這個問題爭論下去其實是沒有意義的——最重要的是理解一個句柄的傳遞會使調用者的對象發生意外的改變。

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