我在不可变字符串上写了下面的代码。
public class ImmutableStrings {
public static void main(String[] args) {
testmethod();
}
private static void testmethod() {
String a = "a";
System.out.println("a 1-->" + a);
a = "ty";
System.out.println("a 2-->" + a);
}
}
输出:
a 1-->a
a 2-->ty
这里变量a的值被改变了(尽管许多人说不可变对象的内容不能被改变)。但是说字符串是不可变的到底是什么意思呢?你能给我解释一下这个话题吗?
来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
你不是在改变赋值语句中的对象,而是用另一个不可变对象替换了一个不可变对象。Object String("a")不会变成String("ty"),它会被丢弃,对ty的引用会被写入a中。
相反,StringBuffer表示一个可变对象。你可以这样做:
StringBuffer b = new StringBuffer("Hello");
System.out.writeln(b);
b.append(", world!");
System.out.writeln(b);
在这里,您没有重新分配b:它仍然指向相同的对象,但该对象的内容已经更改。
你不是在改变赋值语句中的对象,而是用另一个不可变对象替换了一个不可变对象。Object String("a")不会变成String("ty"),它会被丢弃,对ty的引用会被写入a中。
相反,StringBuffer表示一个可变对象。你可以这样做:
StringBuffer b = new StringBuffer("Hello");
System.out.writeln(b);
b.append(", world!");
System.out.writeln(b);
在这里,您没有重新分配b:它仍然指向相同的对象,但该对象的内容已经更改。