我在API文档中搜索了deleteCharAt
方法。该方法的返回类型为StringBuilder
。因此,我认为需要参考变量来放置参考值。
例如,我认为sbuf=sbuf.deleteCharAt(0);
比sbuf.deleteCharAt(0);
更好的表达。
但是,在许多书籍和代码中都使用了后者。
我的想法有什么错误之处?
最佳答案
StringBuilder对象是可变的;调用操作.deleteCharAt()
后,引用sbuf
仍指向同一对象,并且该对象的内部状态已更改。因此,您可以使用sbuf.deleteCharAt(0);
形式调用该方法。
但是,例如,字符串不是可变的。例如,当您调用.substring()
方法时,它返回对字符串类的全新实例的引用。因此,如果您编写了str.substring(5);
,则返回值将被丢弃,而str
仍将具有旧值。相反,对于不可变的对象,您需要编写类似newStr = str.substring(5);
的内容。