我想问一下deleteCharAt方法

时间:2015-07-07 03:35:57

标签: java stringbuilder

我在API文档上搜索了deleteCharAt方法。此方法的返回类型为StringBuilder。所以我认为需要引用变量来引用参考值。

例如,我认为sbuf=sbuf.deleteCharAt(0);sbuf.deleteCharAt(0);表达得更好。

然而,在许多书籍和代码中,使用后者。

我思想中的错误部分是什么?

2 个答案:

答案 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