我在API文档上搜索了deleteCharAt
方法。此方法的返回类型为StringBuilder
。所以我认为需要引用变量来引用参考值。
例如,我认为sbuf=sbuf.deleteCharAt(0);
比sbuf.deleteCharAt(0);
表达得更好。
然而,在许多书籍和代码中,使用后者。
我思想中的错误部分是什么?
答案 0 :(得分:2)
StringBuilder对象是可变的;一旦调用操作.deleteCharAt()
,引用sbuf
仍然是同一个对象,并且该对象的内部状态已更改。因此,您可以使用sbuf.deleteCharAt(0);
。
.substring()
方法时,它会返回对一个全新的字符串类实例的引用。因此,如果您撰写str.substring(5);
,则返回值将被丢弃,而str
仍将具有旧值。相反,在不可变对象的情况下,您需要编写类似newStr = str.substring(5);
的内容。
答案 1 :(得分:0)
在java中,String
个对象是immutable
。一旦创建了字符串对象,就无法修改其数据或状态,但会创建一个新的字符串对象。
考虑下面给出的例子:
class Demo{
public static void main(String args[]){
String s="Demo";
s.concat("String");//concat() method appends the string at the end
System.out.println(s);
}
}
<强>输出:强>
演示
这里,创建并丢弃新修改的字符串文字。
如果我们将它分配给引用变量,它将引用修改后的对象。例如:
class Demo{
public static void main(String args[]){
String s="Demo";
s=s.concat("String");
System.out.println(s);
}
}
<强>输出:强>
DemoString
Java StringBuilder
类用于创建可变字符串。
class Demo{
public static void main(String args[]){
StringBuilder sb=new StringBuilder("Demo");
sb.append("String");//now original string is changed
System.out.println(sb);
}
}
<强>输出:强>
DemoString