答案 0 :(得分:1)
没有
字符串在设计上是不可变的。如果你想改变一个字符串,我建议你看一下StringBuffer类。
不可变是一种设计模式。由于多个实体可以引用一个对象,因此不变性可确保您引用的对象未被引用它的其他对象更改。
答案 1 :(得分:1)
不,您在创建字符串后无法修改它。 String
是immutable class的示例。如果您有以下代码:
String a = "hello";
String b = a;
a
和b
现在引用相同的对象,但您无法对a
执行任何更改b
引用的字符串的操作。您只能将a
分配给其他字符串。
我只能推测为什么Java设计师选择这样做,但我怀疑一个主要原因是促进代码可预测性。如果你有类似的东西。
String h = "house";
String hcopy = h;
稍后您可以通过某种方式修改h
h.splitInHalf()
实际更改了h
的字符串,这也会影响hcopy
并制作当简单的String
变量在没有警告的情况下更改值时,这些事情非常令人沮丧。
如果您希望修改类似String
的结构,可以使用StringBuffer
。
答案 2 :(得分:1)
你不可能,每次尝试更改它时,实际上都会创建一个新的String对象。如果你想使用changable String,请改用StringBuffer,StringBuilder。
内存中有一个String常量池,可以提高性能。
答案 3 :(得分:0)
根据我的经验,这是一个受欢迎的面试问题。目的是弄清楚受访者是否知道java.lang.String
班级的内部。
所以要回答这个问题,通过设计,Java不允许更改String对象,那些对象是不可变的。但是,尽管您不应该在实际的生产代码中执行此操作,但在技术上可以使用Reflection API更改String对象。
import java.lang.reflect.Field;
public class App {
public static void main(String[] args) throws Exception {
String str = "Hello world!";
Field valueField = String.class.getDeclaredField("value");
valueField.setAccessible(true);
char[] c = (char[]) valueField.get(str);
c[1] = 'a';
System.out.println(str); //prints Hallo world!
}
}
正如人们常说的那样,使用魔法咒语“import java.lang.reflect。*;”后,Java会让你自己开枪。