如何/我可以在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