为什么我们可以';在java中,通过字符(索引)在特定位置添加字符
java中的字符串是不可变的,这意味着它们根本不能更改 要执行类似操作,请使用StringBuilder:为什么我们可以';在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是不可变的,因此您不
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();