Java值傳遞與引用傳遞

來源:互聯網
上載者:User

Java面試題:

當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?  

答案基本上是:值傳遞

說明:得出這種結論的前提必須是“參數的值就是對該對象的引用,而不是對象的內容” 

----------------------------------------------------

值傳遞:方法調用時,實際參數把它的值傳遞給對應的形式參數,方法中執行形式參數值的改變不影響實際參數的值。

引用傳遞:也稱為傳地址。方法調用時,實際參數的引用(即地址,而不是參數的值)被傳遞給方法中相對應的形式參數,

在方法中執行對形式參數的操作實際上就是對實際參數的操作(地址操作),這樣方法執行中形式參數值的改變將會影響實際參數的值。


值傳遞——基礎資料型別 (Elementary Data Type)作為參數(如:String,int)

public static void changeInt(int a, int b){<br />int tmp;<br />tmp = a;<br />a = b;<br />b = tmp;<br />}參數調用:
// int類型,值傳遞<br />int a = 123;<br />int b = 456;</p><p>printInt(a, b);<br />changeInt(a, b);<br />printInt(a, b);執行結果:

a = 123; b = 456
a = 123; b = 456
----------------------------------------------------

引用傳遞——對象或數組作為參數(如:Person,Array)

class Person{<br />String name;<br />int age;</p><p>public Person(String name, int age){<br />this.name = name;<br />this.age = age;<br />}</p><p>public void changePerson(Person person, String name, int age){<br />person.name = name;<br />person.age = age;<br />}</p><p>public void printPerson(Person person){<br />System.out.println("name = " + person.name + "; age = " + person.age);<br />}<br />}參數調用:
// 對象,引用傳遞<br />Person p = new Person("張三", 20);</p><p>p.printPerson(p);<br />p.changePerson(p, "李四", 30);<br />p.printPerson(p);執行結果:
name = 張三; age = 20
name = 李四; age = 30

----------------------------------------------------

完整樣本:

package com.val_ref;</p><p>// Person類<br />class Person{<br />String name;<br />int age;</p><p>public Person(String name, int age){<br />this.name = name;<br />this.age = age;<br />}</p><p>public void changePerson(Person person, String name, int age){<br />person.name = name;<br />person.age = age;<br />}</p><p>public void printPerson(Person person){<br />System.out.println("name = " + person.name + "; age = " + person.age);<br />}<br />}</p><p>class iArray{</p><p>public iArray(){</p><p>}</p><p>public void reverseArray(int []array){<br />int tmp;<br />int len = array.length;<br />for(int i=0; i<len/2; i++){<br />tmp = array[i];<br />array[i]= array[len-1-i];<br />array[len-1-i] = tmp;<br />}<br />}</p><p>public void printArray(int []array){</p><p>for(int i=0; i<array.length; i++){<br />System.out.print(array[i] + " ");<br />}<br />System.out.println();<br />}<br />}</p><p>public class testValue {</p><p>public static void main(String []args){</p><p>// 對象,引用傳遞<br />Person p = new Person("張三", 20);</p><p>p.printPerson(p);<br />p.changePerson(p, "李四", 30);<br />p.printPerson(p);</p><p>// 對象,引用傳遞<br />int []array = new int[5];<br />for(int i=0; i<array.length; i++){<br />array[i] = i+1;<br />}<br />iArray obj = new iArray();<br />obj.printArray(array);<br />obj.reverseArray(array);<br />obj.printArray(array);</p><p>// String類型,值傳遞<br />String name1 = "張三";<br />String name2 = "李四";</p><p>printString(name1, name2);<br />changeString(name1, name2);<br />printString(name1, name2);</p><p>// int類型,值傳遞<br />int a = 123;<br />int b = 456;</p><p>printInt(a, b);<br />changeInt(a, b);<br />printInt(a, b);<br />}</p><p>// String類型<br />public static void changeString(String name1, String name2){<br />String tmpName;<br />tmpName = name1;<br />name1 = name2;<br />name2 = tmpName;<br />}</p><p>public static void printString(String name1, String name2){<br />System.out.println("name1 = " + name1 + "; name2 = " + name2);<br />}</p><p>// int類型<br />public static void changeInt(int a, int b){<br />int tmp;<br />tmp = a;<br />a = b;<br />b = tmp;<br />}</p><p>public static void printInt(int a, int b){<br />System.out.println("a = " + a + "; b = " + b);<br />}<br />}

執行結果:
name = 張三; age = 20
name = 李四; age = 30
1  2  3  4  5  
5  4  3  2  1  
name1 = 張三; name2 = 李四
name1 = 張三; name2 = 李四
a = 123; b = 456
a = 123; b = 456



推薦參考:

java中的值傳遞和引用傳遞

Java 是值傳遞還是引用傳遞

java參數傳遞時到底是值傳遞還是引用傳遞

Java 的==和Equals比較

相關文章

聯繫我們

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