繁体   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