日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

發(fā)布時(shí)間:2025/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java面試題:當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?

答:是值傳遞。Java編程語(yǔ)言只有值傳遞參數(shù)

當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是該對(duì)象的引用一個(gè)副本。指向同一個(gè)對(duì)象,對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)象的引用(不是引用的副本)是永遠(yuǎn)不會(huì)改變的。

1.Java中沒(méi)有指針,所以也沒(méi)有引用傳遞了,僅僅有值傳遞。不過(guò),可以通過(guò)對(duì)象的方式來(lái)實(shí)現(xiàn)引用傳遞。類(lèi)似java沒(méi)有多繼承,但可以用多次implements接口實(shí)現(xiàn)多繼承的功能。

2.在Java應(yīng)用程序中永遠(yuǎn)不會(huì)傳遞對(duì)象,而只傳遞對(duì)象的引用。因此是按引用傳遞對(duì)象。但重要的是要區(qū)分參數(shù)是如何傳遞的。

3.Java應(yīng)用程序按引用傳遞對(duì)象這一事實(shí)并不意味著 Java 應(yīng)用程序按引用傳遞參數(shù)。參數(shù)可以是對(duì)象引用,而 Java應(yīng)用程序是按值傳遞對(duì)象引用的。

4.Java應(yīng)用程序中的變量可以為以下兩種類(lèi)型之一:引用類(lèi)型或基本類(lèi)型。當(dāng)作為參數(shù)傳遞給一個(gè)方法時(shí),處理這兩種類(lèi)型的方式是相同的。**兩種類(lèi)型都是按值傳遞的,**沒(méi)有一種按引用傳遞。

按值傳遞意味著當(dāng)將一個(gè)參數(shù)傳遞給一個(gè)函數(shù)時(shí),函數(shù)接收的是原始值的一個(gè)副本。因此,如果函數(shù)修改了該參數(shù),僅改變副本,而原始值保持不變。

按引用傳遞意味著當(dāng)將一個(gè)參數(shù)傳遞給一個(gè)函數(shù)時(shí),函數(shù)接收的是原始值的內(nèi)存地址,而不是值的副本。因此,如果函數(shù)修改了該參數(shù)的值,調(diào)用代碼中的原始值也隨之改變。如果函數(shù)修改了該參數(shù)的地址,調(diào)用代碼中的原始值不會(huì)改變。

值傳遞: 方法調(diào)用時(shí),實(shí)際參數(shù)把它的值傳遞給對(duì)應(yīng)的形式參數(shù),方法執(zhí)行中,對(duì)形式參數(shù)值的改變不影響實(shí)際參數(shù)的值。

**引用傳遞 **:也稱(chēng)為傳地址。方法調(diào)用時(shí),實(shí)際參數(shù)的引用(地址,而不是參數(shù)的值)被傳遞給方法中相對(duì)應(yīng)的形式參數(shù),在方法執(zhí)行中,對(duì)形式參數(shù)的操作實(shí)際上就是對(duì)實(shí)際參數(shù)的操作,方法執(zhí)行中形式參數(shù)值的改變將會(huì)影響實(shí)際參數(shù)的值。

示例代碼如下:

// 在函數(shù)中傳遞的是基本數(shù)據(jù)類(lèi)型 public class Test { public static void main(String[] args) { int a = 3; int b = 4; change(a, b); System.out.println("a=" + a); // 3System.out.println("b=" + b); // 4 } public static void change(int i, int j) { int temp = i; i = j; j = temp; } } 結(jié)果為: a=3 b=4 原因:參數(shù)中傳遞的是基本數(shù)據(jù)類(lèi)型a和b的拷貝,在函數(shù)中交換的也是那份拷貝的值,而不是數(shù)據(jù)本身。 // 在函數(shù)中傳的是引用數(shù)據(jù)類(lèi)型 public class Test { public static void main(String[] args) { int[] count = { 1, 2, 3, 4, 5 }; change(count);     Sysout.out.println(count[0]); // 6} public static void change(int[] counts) { counts[0] = 6; } } 結(jié)果為:6原因:在方法中,傳遞引用數(shù)據(jù)類(lèi)型int數(shù)組,實(shí)際上傳遞的是該數(shù)組的地址值,他們都指向數(shù)組對(duì)象,在方法中可以改變數(shù)組對(duì)象的內(nèi)容。 // 傳遞的是對(duì)象的引用 class A { int i = 0; } public class Test { public static void main(String args[]) { A a = new A(); add(a); // 1 System.out.println(a.i); // 0} public static void add(A a) { a = new A(); a.i++;System.out.println(a.i); } }結(jié)果為: 10 原因:在該程序中,對(duì)象的引用指向的是A,而在add方法中,傳遞的引用的一份副本則指向了一個(gè)新的對(duì)象,并對(duì)新的對(duì)象進(jìn)行操作。而原來(lái)的A對(duì)象并沒(méi)有發(fā)生任何變化。引用指向的是還是原來(lái)的A對(duì)象。 // String 不改變,數(shù)組改變 public class Example { public static void main(String args[]) { Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + " and "); // good andSystem.out.println(ex.ch); // gbc} String str = new String("good"); // good 是常量,不能改char[] ch = { 'a', 'b', 'c' }; public void change(String str, char ch[]) { str = "test ok"; // test ok 又是一個(gè)常量,也不能改   等價(jià)于 String str1 = new String("test ok");ch[0] = 'g'; } } 結(jié)果為:good and gbc 原因:String類(lèi)比較特別,看過(guò)String類(lèi)代碼的都知道,String類(lèi)是final修飾的。所以值是不變的。 函數(shù)中String對(duì)象引用的副本指向了另外一個(gè)新String對(duì)象,而數(shù)組對(duì)象引用的副本沒(méi)有改變,而是改變對(duì)象中數(shù)據(jù)的內(nèi)容。 對(duì)于對(duì)象類(lèi)型,也就是Object的子類(lèi),如果你在方法中修改了它的成員的值,那個(gè)修改是生效的,方法調(diào)用結(jié)束后,它的成員是新的值;但是如果你把它指向一個(gè)其它的對(duì)象,方法調(diào)用結(jié)束后,原來(lái)對(duì)它的引用并沒(méi)用指向新的對(duì)象。

總結(jié)

以上是生活随笔為你收集整理的java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。