Java的值傳遞說明

來源:互聯網
上載者:User

標籤:java值傳遞

只有在方法調用的時候才涉及到值傳遞的概念!Java中進行方法調用的時候傳遞參數時,遵循值傳遞的原則:1)基礎資料型別 (Elementary Data Type),傳遞的是資料的拷貝2)引用資料類型,傳遞的是傳遞的引用地址的拷貝,而不是該對象本身樓主的問題涉及到的內容太多,首先理解以下概念形參:方法聲明時的參數變數,用於接收調用方法時傳過來的實參如:void f(int i){}  或  void f(String s){}實參:方法調用時實際傳過去的內容,用於給形參賦值如:f(1)  或  f("abc")變數按不同的資料類型分為2類:1)基礎資料型別 (Elementary Data Type)變數:4類8種基本類型,byte,short,char,int,long,float,double,boolean如:int i = 0;2)引用資料類型變數: 類,介面,數組如:String s = "abc";注意:Java中除了4類8種基礎資料型別 (Elementary Data Type)以外全部是引用資料類型變數按聲明的位置不同分為2類:1)成員變數:方法外部,類內部聲明的變數2)局部變數:方法內部聲明的變數,形參屬於局部變數變數的初始化:1)成員變數:如果不顯示對其初始化,那麼Java採用預設值對其進行初始化2)局部變數:不賦值,就不能使用看來樓主對引用和對象的概念還不是特別瞭解,執行中的記憶體管理:不同的作業系統不太一樣,但一般記憶體都分為4個地區:1)heap(堆):存放new出來的對象2)stack(棧):存放局部變數3)data segment(資料區):靜態變數 和 字串常量4)code segment(代碼區):存放代碼 例子:public class Test {void f(int j) {System.out.println(j);}void ff(String ss) {System.out.println(ss);}public static void main(Stirng[] args) {int i = 100;String s = "hello";Test t = new Test();t.f(i);t.ff(s);}}當mian方法開始執行的時候int i = 100; 棧中分配一塊空間,存放變數i,值為100,基礎資料型別 (Elementary Data Type)只佔一塊空間String s = "hello"; "hello"是字串常量,分配在data區,字串常量為String類的一個對象,s指向了這個"hello"對象,這就是引用資料類型,在記憶體中佔兩塊空間,有點形象思維:一提參考型別,就是一塊記憶體指向另一塊記憶體s可以被叫做:引用、引用變數、引用地址,其實s就是一個指標,在這裡不用鑽牛角尖,你就知道s是一個引用,s的值是一個地址,根據這個地址就可以找到一個對象就ok了,Test t = new Test(); 同理,棧中的引用t指向了堆中new出來的這個Test對象Java中進行方法調用的時候傳遞參數時,遵循值傳遞的原則:1)基礎資料型別 (Elementary Data Type),傳遞的是資料的拷貝2)引用資料類型,傳遞的是傳遞的引用地址的拷貝,而不是該對象本身t.f(i);方法的形參屬於局部變數,所以在調用f方法的時候,棧記憶體配置一個int型的變數j,將i的值當做實參傳遞過去,i的值是100,現在將100拷貝給了j,那麼j的值就是100,這就是樓主說的“值傳遞”,接著列印,最後方法結束,為該方法分配的局部變數立刻全部清空,那麼Stack中這個j消失了t.ff(s);調用ff方法的時候,棧記憶體配置一個String型的變數ss,將s的值當做實參傳遞過去,s指向了"hello"對象,s的值是一個地址,現在將這個地址拷貝給了ss,那麼ss也就指向這個"hello"了這就是樓主說的"引用傳遞",現在s 和 ss 兩個引用 同時指向了"hello"對象,然後列印ss,最後方法結束,棧中這個ss被清除現在main方法執行結束,為main方法分類的局部變數清除,i,s,t全部消失,data區的符串常量"hello"和堆記憶體的Test對象,由於沒有任何引用指向他們了,就會被垃圾收集器回收累死我了..

Java的值傳遞說明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.