如何/我可以在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. 我可以在不設置大小的情況下使用C++ char數組嗎?
- 2. 我可以在不設置數據庫的情況下使用Spring-Roo嗎?
- 3. 可以在沒有setter的情況下設置BeanUtils.setProperty()的值嗎?
- 4. 在這種情況下,我可以使用eval函數嗎?
- 5. 我可以在沒有ADFS的情況下設置SAML IDP嗎?
- 6. 我可以在沒有定義構造函數的情況下在堆上創建新的結構體嗎?
- 7. 我可以在不使用IDE的情況下發布嗎?
- 8. 我可以在不使用Composer的情況下安裝Laravel嗎?
- 9. 我可以在不安裝的情況下使用git嗎?
- 10. 在沒有默認構造函數的情況下使用nhibernate
- 11. 在不使用構造函數和設置函數的情況下創建唯一的id
- 12. 默認情況下,Java構造函數是不是公共的?
- 13. 在這種情況下可以使用javascript而不是java嗎?
- 14. 在使用線程宏的情況下可以解構嗎?
- 15. 我可以在我的情況下使用ASP.NET MVC Partial嗎?
- 16. 我們是否可以在不使用構造函數的情況下創建perl對象
- 17. 是否有可能在不調用構造函數的情況下在Java中創建對象的實例?
- 18. 我可以在不登錄的情況下應用gsettings嗎?
- 19. 我可以在不使用API的情況下在BigCommerce中創建webhook嗎?
- 20. 在這種情況下調用super的構造函數是多餘的嗎?
- 21. 我可以在沒有CALayers的情況下使用Core Animation嗎?
- 22. 我可以在沒有Node.js的情況下使用Tumblr.js嗎?
- 23. 我可以在沒有Zend_Application的情況下使用zfdebug嗎?
- 24. 我可以在沒有SharePoint的情況下使用K2 Blackpearl嗎?
- 25. 我們可以在if-else的情況下使用(id)嗎?
- 26. XPages:SSJS函數可以在不將其放入庫中的情況下重用嗎?
- 27. 是否可以在C++中不使用轉換構造函數的情況下進行類型轉換?
- 28. 我可以在不需要文件的情況下填充一個函數嗎?
- 29. 我可以在不使用中鍵的情況下使Excel順利滾動嗎?
- 30. 我可以在不使用UITableView的情況下使用NSFetchedResultsController
它總是**一個壞主意。如果您需要可變字符串,請改用'StringBuilder'實例。 – 2010-08-02 13:06:32