Java中的參數傳遞

來源:互聯網
上載者:User

當然要看你怎麼定義by value 和 by reference。Java的官方文檔【3】
中如此描述:“When the method or constructor is invoked, the values of the actual argument expressions initialize newly created parameter variables.”但是作為物件導向的語言,一個對象的值又是什麼呢?所以這裡value並不等同於面向過程中的定義。在C語言裡,或者是一個值,或者就是一個地址(引用)。但是Java裡面,對象的值,就是對象的地址的值(具體見後面的例子)。

 

基本總結:

基本類型作為參數傳遞時,是傳遞值的拷貝,無論你怎麼改變這個拷貝,原值是不會改變的。

對象作為參數傳遞時,是把對象在記憶體中的地址拷貝了一份傳給了參數。

String類是個特殊的類,對它的一些操作符是重載的,所以String對象和基本類型一樣,一般情況下作為參數傳遞。

 

例子:

public class parameterPass {<br />public static void Test1(){<br />int i = 10;<br />System.out.println("Before change, i = " + i);<br />changeInt(i);<br />System.out.println("After change, i = " + i);<br />}</p><p>public static void changeInt(int i){<br />i = 20;<br />}</p><p>public static void Test2() {<br />Person p1 = new Person();<br />p1.setAge(10);<br />System.out.println("Before change, p1 age = " + p1.getAge());<br />changeAge(p1);<br />System.out.println("After change, p1 age = " + p1.getAge());<br />}<br />public static void changeAge(Person person) {<br />person.setAge(20);<br />}</p><p>public static void Test3(){<br />String str = "Hello";<br />System.out.println("Before change, str = " + str);<br />changeString(str);<br />System.out.println("After change, str = " + str);<br />}</p><p>public static void changeString(String str){<br />str = str + " World!";<br />}<br />public static void Test4(){<br />Integer i = new Integer(10);<br />System.out.println("Before change, i = " + i);<br />changeInteger(i);<br />System.out.println("After change, i = " + i);<br />}</p><p>public static void changeInteger(Integer i){<br />i = 20;<br />}</p><p>public static void main(String[] args) {<br />System.out.println("Test pass primitive data type: int");<br />Test1();<br />System.out.println("/nTest pass user defined object: Person");<br />Test2();<br />System.out.println("/nTest pass object type: String");<br />Test3();<br />System.out.println("/nTest pass object type: Integer");<br />Test4();<br />}<br />}<br />class Person {<br />int age;<br />public int getAge() {<br />return age;<br />}<br />public void setAge(int age) {<br />this.age = age;<br />}<br />}<br />

參考:

【1】http://java.ccidnet.com/art/3737/20050527/472879_1.html

【2】http://javadude.com/articles/passbyvalue.htm

【3】http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.1

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.