1. 程式人生 > >Java中的形參和實參的區別以及傳值呼叫和傳引用呼叫

Java中的形參和實參的區別以及傳值呼叫和傳引用呼叫

原文地址:http://blog.csdn.net/miniminiyu/article/details/52061401

 名詞解析:

1.形參:用來接收呼叫該方法時傳遞的引數。只有在被呼叫的時候才分配記憶體空間,一旦呼叫結束,就釋放記憶體空間。因此僅僅在方法內有效。

2.實參:傳遞給被呼叫方法的值,預先建立並賦予確定值。

3.傳值呼叫:傳值呼叫中傳遞的引數為基本資料型別,引數視為形參。

4.傳引用呼叫:傳引用呼叫中,如果傳遞的引數是引用資料型別,引數視為實參。在呼叫的過程中,將實參的地址傳遞給了形參,形參上的改變都發生在實參上。

 案例分析:

1.基礎資料型別(傳值呼叫)

傳值,方法不會改變實參的值。

2.引用資料型別(引用呼叫)
傳引用,方法體內改變形參引用,不會改變實參的引用,但有可能改變實參物件的屬性值。

舉兩個例子:

  (1)方法體內改變形參引用,但不會改變實參引用 ,實參值不變。

  1. publicclass TestFun2 {  
  2. publicstaticvoid testStr(String str){  
  3. str="hello";//型參指向字串 “hello”
  4. }  
  5. publicstaticvoid main(String[] args) {  
  6. String s="1" ;  
  7. TestFun2.testStr(s);  
  8. System.out.println("s="
    +s); //實參s引用沒變,值也不變
  9. }  
執行結果列印:s=1
(2)方法體內,通過引用改變了實際引數物件的內容,注意是“內容”,引用還是不變的。
  1. publicclass TestFun4 {  
  2. publicstaticvoid testStringBuffer(StringBuffer sb){  
  3. sb.append("java");//改變了實參的內容
  4. }  
  5. publicstaticvoid main(String[] args) {  
  6. StringBuffer sb= new StringBuffer("my ");  
  7. TestFun4.testStringBuffer(sb);  
  8. System.out.println("sb="+sb.toString());//內容變化了
  9. }  
  10. }  

執行結果,列印:sb=my Java 。

  所以比較引數是String和StringBuffer 的兩個例子就會理解什麼是“改變實參物件內容”了。

  總結:

1.java的基本資料型別是傳值呼叫,物件引用型別是傳引用。

2.當傳值呼叫時,改變的是形參的值,並沒有改變實參的值,實參的值可以傳遞給形參,但是,這個傳遞是單向的,形參不能傳遞迴實參。

3.當引用呼叫時,如果引數是物件,無論對物件做了何種操作,都不會改變實參物件的引用,但是如果改變了物件的內容,就會改變實參物件的內容。


相關推薦

java 類方法例方法 以及 類變量例變量

ati 所有 ron 變量 執行 成員 退出 strong 修飾 類體中的方法分為實例方法和類方法兩種,用static修飾的是類方法 類方法: 對於類中的類方法,在該類被加載到內存時,就分配了相應的入口地址。從而類方法不僅可以被類創建的任何對象調用執行,也可以直接通過類名調

詳談Apache、Nginxtomcat的區別以及處理靜態頁面動態頁面的方式

請求 php腳本 特點 java類 是你 源碼 proc 總結 愛好者 就目前來說,網站主要分為靜態頁面和動態頁面,純靜態頁面的網站已經比較少見了,大型網站一般使用的是靜態頁面+動態頁面的建站技術,還有一部分網站是純動態頁面。負責處理這些頁面的軟件我們通常稱之為web容器,

divspan的區別以及行內元素塊元素的轉換?

div和span的區別以及行元素和塊元素的轉換?相同點:div和span都可以將HTML元素組合起來,類似一個盒子將裡面的內容當作一個整體來處理,從而實現整體作用效果,提高效率。不同點:div是塊級元素,是可用於組合其他HTML元素的容器,其常用的用途是文件佈局,主要用於頁面

抽象類介面的區別 以及選擇抽象類介面的應用場景

介面和抽象類有什麼區別 你選擇使用介面和抽象類的依據是什麼? 介面和抽象類的概念不一樣。介面是對動作的抽象,抽象類是對根源的抽象。 抽象類表示的是,這個物件是什麼。介面表示的是,這個物件能做什麼。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說

Java區別以及呼叫引用呼叫

原文地址:http://blog.csdn.net/miniminiyu/article/details/52061401  名詞解析: 1.形參:用來接收呼叫該方法時傳遞的引數。只有在被呼叫的時候才分配記憶體空間,一旦呼叫結束,就釋放記憶體空間。因此僅僅在方法內有效

關於Java區別

類型 分配 不能 內部使用 rdquo 數量 運行時 常量 使用 形參出現在函數定義中,在整個函數體內都可以使用,離開該函數則不能使用。 實參出現在主調函數中,進入被調函數後,實參變量也不能使用。 形參和實參的功能是作數據傳送。發生函數調用時,主調函數把實參的

JS區別

JS中形參和實參的區別 from:https://blog.csdn.net/qq_33187168/article/details/50346465 形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。 實參出現在主調函式中,進入被調函式後,實參變數也不能使用。

c語言區別

形式引數和實際引數 函式的引數分為形參和實參兩種。在本小節中,進一步介紹形參、實參的特點和兩者的關係。形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫

區別

返回 pre bsp 類型變量 目的 出現 分配內存 函數定義 class 形參:全稱為"形式參數"是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳如的參數. 實參:全稱為"實際參數"是在調用時傳遞個該函數的參數. 形參出現在函數定義中,在整個函數體內都

C++的const限定符(5)——const

1、當形參有頂層const時,傳給它常量物件或非常量物件都是可以的,這一點複合之前所說的,因為形參的初始值是拷貝了實參的。 2、在定義過載函式時,需要注意:對於形參是否是const的,是無法被編譯器所區分的。 void foo(int i){} void foo(co

關於Java參與的理解

今天閱讀了一個寫的非常棒的博文,通過此博文再次複習了Java中引數傳遞的知識(即值傳遞與引用傳遞的區別)。參考網站http://www.cnblogs.com/binyue/p/3862276.html。下面我將通過次博文記錄自己的理解,還望能夠幫助再學Java或者複習Java的朋友們。 理解J

函式返回作為存在的問題以及區別

一、問題描述 若已定義的函式有返回值,則以下關於該函式呼叫的敘述中錯誤的是( D ) (A)函式呼叫可以作為獨立的語句存在。 (B)函式呼叫可以作為一個函式的實參。 (C)函式呼叫可以出現在表示式中。 (D)函式呼叫可以作為一個函式的形參。 解析:函式返回值存在暫存器

方法

<span style="font-size:18px;">package learn_20150801; public class DataWrap { public int a; public int b; }</span><span style="color:#ff

你真的瞭解JAVA嗎?

「碼匠筆記」前幾天在頭條上看到一道經典面試題,引發了一些思考。也是寫這篇文章的導火索。背景請看題

有何區別

剛入門的同學可能會對形參和實參的概念模糊不清。這裡小博老師帶大家回顧一下。     第一點,形參不能獨立於方法單獨存在。必須在方法內才會發生作用,也就是必須在方法中使用,不在方法外可見。而實參則可以在程式的任何地方都使用。     第二點,形參代表一個合集,具有不確定性,

cor text nsf 數據 round ans post oat pla 形參出現在函數定義中,在整個函數體內都可以使用, 離開該函數則不能使用。實參出現在主調函數中,進入被調函數後,實參變量也不能使用。 形參和實參的功能是作數據傳送。發生函數調用時, 主調函數把實參的

3-12

div war 16px pre 參數 多個 src bsp span # * 號可以有多個參數 *名字也可以自定義 規範 是 *args 按規矩來 *args 接收多個位置參數 轉換成元組 **kwargs 接收N個關

函數

函數形參 pan nbsp spa color 形參 print class code def cal(x,y):。。形參 s=x**y 。。x的y次方 return s c=cal(2,3) ..實參 print(c) 函數形參和實參

C語言函數聲明、

-s 函數返回 int 是什麽 變量 strong 返回值 pro ont 函數原型: 原型prototype是函數的聲明;描述了函數的返回值與參數; 函數原型說明了兩點: 1、該函數的返回值 2、該函數的參數及其類型 ++++++++++++++++++++++++++

C語言函式宣告、

函式原型: 原型prototype是函式的宣告;描述了函式的返回值與引數;  函式原型說明了兩點: 1、該函式的返回值 2、該函式的引數及其型別 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 函式的引數: 引數到底是什