String物件的傳遞問題,為什麼傳給change的str沒有修改?

時間 2022-01-05 19:39:59

1樓:無奈的咕噠夫

String物件是屬於物件引用沒錯,但是String類是被final修飾的,所以它的物件例項是不能改變的。StringBuffer類就可以直接修改。

2樓:lIIllIlII

String 確實是引用型別,但是每個字串物件建立出來都是不可變的,所以String a = 「str1」 其實是把乙個引用a指向乙個叫「str1」的物件,這時如果對a重新負值 a = 「str2」 , 那麼引用a 就被指向了另乙個物件「str2」。

另乙個知識點是變數的作用域,change 方法只是改變了方法的區域性變數所引用的字串物件。這並沒有改變類成員str 所引用的物件。如果把change 方法裡 str = 「test ok」; 一行改成 this.

str = 「test ok」; 就會有不一樣的效果。

3樓:大白

這是涉及到乙個知識點: 形參和實參

實參是你的 String str = new String("good"); 裡的 str,

而形參是 change(String str) 裡的 str

這倆 str 不是同乙個變數, 但引用的是同乙個"good", 至少在執行 str = "test ok" 之前是這樣的

當程式執行到 str = "test ok" 時, 你 change 裡的 str 指向了 "test ok" 這一塊常量池位址

而 exmple.str 指向的還是 "good" , exmple.str就沒變過, 所以最終列印的是 good

而隔壁 char ch 則不一樣, 雖然它也存在兩個 ch , 乙個實參乙個形參, 但 change函式內的形參 ch 修改的是ch變數指向的引用的內容, 所以他會變成 gbc

建議學點C語言, 形參實參深拷貝淺拷貝

Java中關於String的問題?

超級大地 Q1jvm執行記憶體分為五個部分,那字串常量池屬於哪個部分的?是屬於堆的一部分還是單獨的一部分記憶體區域?字串常量池屬於方法區,準確的來說是方法區中的執行時常量池。方法區邏輯上是堆記憶體的一部分,例如我們常用的HotSpot虛擬機器就是將方法區劃為堆記憶體中的永久代,但是為了區分,主流還是...

老師跟家長反映孩子寫作業不認真等問題,為什麼很多家長反覆說孩子以前不這樣?

大帥氣 抱歉,你的問題不好回答。現在的社會,尊師重道沒那麼普遍。有職業操守的老師不多了,有家教的家長你也沒法強求。你的問題只能出在兩點,要麼老師問題,要麼家長問題。如果你是老師,你必須也只能把問題看到自己身上!因為對真正的老師而言,教不嚴,師之惰!首先所有問題都會歸結到自己身上,這是職業操守。你沒有...

關於Python中引數傳遞和作用域的問題?

丁果 這個問題我們可以換個角度看,看看python的C API,用c寫的python模組中引數傳進去的都是乙個PyObject的指標。比如這個例子,丟擲乙個ValueError異常 include Python.h static PyObject raiseError PyObject self,P...