原因一、String字符串类型的数据结构
字符串在String类的内部是用一个char[]数组表示的,而这个数组使用final关键字修饰的,所以不能修改。
举例说明:
String ip="127.0.0.1";
String ret=ip.replace(".","#");
System.out.println(ip);
System.out.println(ret);
输出结果:
127.0.0.1
127#0#0#1
原因二、每次修改,都会产生一个新的字符串
//邮箱地址
String email="12345@qq.com";
//截取用户名
int endIndex=email.indexOf("@");
String id=email.substring(0,endIndex);
System.out.println(id);
输出结果:12345
看了上述代码,可能会想,id是把email截取过后赋值给他自己吗?那么email变了吗?我们可以通过String类的源代码得知,当我们输入的参数是合法参数时,会new一个新的字符串对象,即截取后的“12345”,将其赋值给id,当我们输出email时,就会发现email的值并没有改变,还是截取前的"12345@qq.com"。
在我们通过string类的其他方法改变它的值时,都是通过产生一个新的字符串对象,将修改过后的值赋给这个新的字符串对象,原字符串从始至终都没有改变。