簡體   English   中英

我可以在不使用構造函數的情況下在Java中設置String的值嗎?

[英]Can I set the value of a String in Java without using a constructor?

How-Do /我可以在Java中設置String對象的值(不創建新的String對象)嗎?

String上沒有“set”方法。 字符串在Java中是不可變的。 要更改String變量的值,您需要為變量分配不同的字符串。 您無法更改現有字符串。

(不創建新的String對象)

分配不會創建新對象 - 它會復制引用。 請注意,即使你寫這樣的東西:

s = "hello";

每次運行時都不會創建新的字符串對象。 字符串對象將來自字符串池。

實際上在Java中無法做到這一點,默認情況下String對象是不可變的。

事實上,這就是為什么使用像"str1" + "str2"這樣的"+"連接運算符非常低效的原因之一,因為它所做的就是復制每個字符串以產生第三個字符串。

根據您的需要,您應該考慮使用StringBuilder

字符串是不可變的,因此您無法更改已創建字符串的值。

我偶然發現了這個問題,因為我必須在“封閉類型”中設置一個字符串 - 一個匿名類型。 但是我想在里面設置並在外面使用的所有變量都必須是最終的。

簡單的解決方案是使用StringBuilder - 它是一個可變的String。

String對象在Java中是不可變的,因此任何更改都會創建一個新的String對象。 如果要在不創建新對象的情況下更改對象等字符串,請使用StringBuilder。 作為獎勵,如果您了解字符串的最終長度,StringBuilder允許您預先分配額外的內存。

這取決於你對象的定義。 如果你的意思是參考,沒有。 始終創建引用。 如果你的意思是字符使用的內存,當然。

字符串被實習(如果可能),這意味着在任務中:

String s1 = "Hello";
String s2 = "Hello";

有2個引用(指向內存位置的指針),但Hello只在內存中有1個位置。 這是Strings無法修改的原因之一。

當然,您可以通過反射訪問內部char數組。 但這樣做通常是個壞主意。 更多關於http://www.eclipsezone.com/eclipse/forums/t16714.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM