Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我们可以';在java中,通过字符(索引)在特定位置添加字符_Java_String - Fatal编程技术网

为什么我们可以';在java中,通过字符(索引)在特定位置添加字符

为什么我们可以';在java中,通过字符(索引)在特定位置添加字符,java,string,Java,String,java中的字符串是不可变的,这意味着它们根本不能更改 要执行类似操作,请使用StringBuilder: public class ReverseString { public static void main(String[] args) { String s = "mnop"; s.charAt(0) = 'l'; } } s.charAt(0)返回一个char值,而不是可以为其赋值的char变量 无论如何,String是不可变的,因此您不

java中的字符串是不可变的,这意味着它们根本不能更改

要执行类似操作,请使用StringBuilder:

public class ReverseString {
    public static void main(String[] args) {
        String s = "mnop";
        s.charAt(0) = 'l';
    }
}
s.charAt(0)
返回一个
char
值,而不是可以为其赋值的
char
变量

无论如何,
String
是不可变的,因此您不能修改现有
String
的值

您可以获取
字符串的所有字符的数组副本,并修改该数组:

StringBuilder sb = new StringBuilder("mnop");
sb.setCharAt(0, 'l');

//later, you probably want to get back to a String:
String s = sb.toString();
但是,这不会修改原始的
字符串,因为它是不可变的

您可以使用该数组创建新的
字符串

String s = "mnop";
char[] chars = s.toCharArray();
chars[0]= 'l';

charAt
返回字符串中该位置的字符副本。它不是对原始字符串的引用,原始字符串是不可变的

但是,您可以使用以下选项:

String newS = new String(chars);

Java只允许您分配变量、字段和数组元素

方法(如
s.charAt(0)
)的结果不是这些结果,因此无法分配给它

原因在于Java返回的方式:它通过值而不是引用返回,并且该值只是暂时存在的。因此,如果您能够分配它,则该分配的副作用将立即消失,使其变得毫无意义


String
也是不可变的;但是,对您可以分配的内容的限制是您不能这样做的原因,即使对于您可能尝试创建的一些概念性的
MutableString
类也是如此。

因为字符串在java中是不可变的。一旦创建,它们就不会改变。请看
StringBuilder
s。是的,字符串是不可变的,但即使使用“
MutableString
”类,您也无法执行OP试图执行的操作。好吧,我同意您的说法,但如果OP使用的是正确的类型,他可能还找到了setCharAt()、insert()以及其他类型。。我想他只是从其他语言映射了str.charAt(I)str[I]
。。不管怎样,你从我这里得到+1。。
StringBuilder sb = new StringBuilder("mnop");
sb.setCharAt(0, 'l');
String s = sb.toString();