首页 > 解决方案 > StringBuilder deleteCharAt 不起作用

问题描述

    String s = "world";
    StringBuilder str = new StringBuilder(s);
    str.deleteCharAt(0);
    System.out.println(s);

此代码输出以下结果:世界,我做错了什么?为什么字符串的第一个字符没有被删除?

标签: java

解决方案


和您的代码的问题StringBuilder在于它并不完全符合您的想法。

AStringBuilder可以将 anyCharSequence作为构造函数参数,但它不会直接更改传递的值。特别是字符串是不可变的。不管怎样StringBuilder,不要直接改变 Object 。它们将字符缓冲在char[]不再不可变的 a 中。

要获取缓冲值(以及新的“更改”字符串),您必须调用 的toString()方法,StringBuilder因为它将基于内部存储的缓冲区创建一个新字符串。
但由于它System.out.println()隐式调用该toString()方法,因此此处不需要。

System.out.println(str);

推荐阅读