形參於實參對應兩種型別:值型別與引用型別
值型別:包括8種基本型別(byte、short、int、long、double、float、char、boolean)+string
引用型別:陣列、類、介面等型別。
注意string型別,這個比較特殊,它是儲存在常量池中的,你可以把它近似看成值型別的。因為它的值一旦確定,就無法改變【可能不太嚴謹,可以看看jvm內容,應該可以通過其他方式修改的,但一般的操作是修改不了string的值。
為值型別時,形參方法內的引數值改變,並不會影響到實參的值。
為引用型別時,形參方法內的引數值改變時,會影響到實參的值。注意是位址所指向的堆中的值,如果形參的位址改變了,那麼這個改變不會影響到實參。
**示例:
//定義乙個tree類
class tree{
public int val;
public treenode leftchild;
public treenode rightchild;
public treenode(int newdata)
{this.val = newdata;
this.leftchild = this.rightchild = null;
//定義乙個修改形參內部tree指向的方法
public void change(tree tree){
tree=new tree(22222);
//主方法
public static void main(string args){
tree tree=new tree(1);
system.out.println(tree.val);//輸出值1
change(tree);
system.out.println(tree.val);//輸出值1
為什麼兩次的輸出結果沒有變呢,明明在change()方法中已經讓tree=new tree(22222);了,這是因為「我們只是修改了tree的位址指向,並沒有修改存放在堆中的實際值,而實參的位址並不會跟著形參的位址變化而變化」,當形參的change()方法執行完畢後,存放在棧中的形參位址變數也就會被釋放掉,不復存在了。所以怎麼可能會影響到實參的位址指向呢?
形參與實參的區別。
1 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。2 實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此...
形參與實參的區別
1 形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。2 實參可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們必須有確定的值,以便把這些值傳送給形參。因此應...
形參與實參的區別
形參和實參的區別 形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫時,主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。1.形參變數只有在被呼叫時才分配...