如何/我可以在Java中設置String對象的值(不創建新的String對象)?我可以在不使用構造函數的情況下在Java中設置String的值嗎?
回答
String
上沒有「set」方法。在Java中字符串是immutable。要更改String
變量的值,您需要爲該變量分配一個不同的字符串。你不能改變現有的字符串。
(不創建一個新的String對象)
勘定不創建一個新的對象 - 它複製參考。請注意,即使你寫的是這樣的:
s = "hello";
它不會創建一個新的字符串對象每次運行時間。字符串對象將來自字符串池。
字符串是不可變的,所以你不能改變已經創建的字符串的值。
實際上在Java中沒有辦法做到這一點,String對象默認是不可變的。
事實上,這就是爲什麼使用"+"
級聯運算符(如"str1" + "str2"
)效率非常低的原因之一,因爲它的作用是複製每個字符串以產生第三個字符串。
根據您的需要時,你應該考慮使用StringBuilder
這取決於你的對象定義了一下。如果你的意思是參考,不。一個引用總是被創建。如果你指的是字符使用的內存,當然。
字符串被扣留(如果可能的話),這意味着在一個賦值:
String s1 = "Hello";
String s2 = "Hello";
有2名的引用(指向的存儲器位置),但Hello
是在存儲器上只有1處。這是字符串無法修改的原因之一。
確定你可以通過反射訪問內部字符數組。但這樣做通常是個壞主意。更多關於http://www.eclipsezone.com/eclipse/forums/t16714.html。
String對象在Java中是不可變的,因此任何更改都會創建一個新的String對象。如果您想更改像對象這樣的字符串而不創建新對象,請使用StringBuilder。作爲一個獎勵,StringBuilder允許你預先分配額外的內存,如果你知道你的字符串的最終長度的東西。
我偶然發現這個問題,因爲我必須在「封閉類型」 - 一個匿名類型中設置一個字符串。但是我想要在內部設置並在外部使用的所有變量都必須是最終的。
簡單的解決方案是使用StringBuilder - 它是一個可變的字符串。
- 1. 我可以在不寫函數的情況下使用scrollTop嗎?
- 2. 我可以在不設置數據庫的情況下使用Spring-Roo嗎?
- 3. 我可以在不設置大小的情況下使用C++ char數組嗎?
- 4. 可以在沒有setter的情況下設置BeanUtils.setProperty()的值嗎?
- 5. 在這種情況下,我可以使用eval函數嗎?
- 6. 我可以在沒有ADFS的情況下設置SAML IDP嗎?
- 7. 我可以在沒有定義構造函數的情況下在堆上創建新的結構體嗎?
- 8. 我可以在不使用IDE的情況下發布嗎?
- 9. 我可以在不使用SqPaymentForm的情況下請求Card_Nonce嗎?
- 10. 我可以在不使用xterm的情況下啓動clisp嗎?
- 11. 我可以在不使用Composer的情況下安裝Laravel嗎?
- 12. 我可以在不安裝的情況下使用git嗎?
- 13. 我可以在不使用foreach的情況下顯示數組鍵和值嗎?
- 14. 在沒有默認構造函數的情況下使用nhibernate
- 15. 在不調用python中的構造函數的情況下使用類
- 16. 在Java中的構造函數中設置參數的值
- 17. 在不使用構造函數和設置函數的情況下創建唯一的id
- 18. std :: string可以在構造函數中分配嗎?
- 19. 默認情況下,Java構造函數是不是公共的?
- 20. 我可以在構造函數中使用setter嗎?
- 21. 在這種情況下可以使用javascript而不是java嗎?
- 22. 可以在類的構造函數中使用「new」來調用Java中的另一個構造函數嗎?
- 23. 在使用線程宏的情況下可以解構嗎?
- 24. 我可以在我的情況下使用ASP.NET MVC Partial嗎?
- 25. 我可以在不實現子構造函數的情況下創建Perl子類嗎?
- 26. 函數可以在沒有類的情況下調用嗎? php
- 27. 在沒有writeln的情況下找不到構造函數
- 28. 我們是否可以在不使用構造函數的情況下創建perl對象
- 29. 在不調用構造函數的情況下在類中調用方法
- 30. 我可以在沒有用戶的情況下使用oauth2嗎?
它總是**一個壞主意。如果您需要可變字符串,請改用'StringBuilder'實例。 – 2010-08-02 13:06:32