String类初始化之后不可变,因为java设计者不希望我们方法传参是字符串的时候,方法内修改会影响外边的串,所以采取了一种传递拷贝的方式(也就是传值)
String ss = "this is the origen String"; TestString.showString(ss); public static void showString(String s){ System.out.println(s); }
2.2.1 Java中String不可变是怎么一回事java中,一旦产生String对象,该对象就不会在发生变化。但是String另一方面的确提供了修改String的方法。这看起来很矛盾,实际上是我们没有仔细的了解那些修改的方法
比如replace(),如果可以看到源码,可以清楚的看到该方法实际上新产生一个字符串,替换操作是针对新的字符串。(下图参考自参考Java进阶01 String类,简单的表示replace()方法调用时
s的变化)
下边的代码 :我在原字符串的基础上添加了一句话,然后判断他们是否相同(如果是同一个对象修改,==输出结果应该是true)
String s1 = "我";
s1+="我想在加点东西";
system.out.println(s1 == s2)//输出结果是false
思考一下 "s1指向的对象中的字符串是什么"(我们潜意识的认为s1也会被修改,但是当s2 = "s2"时,实际上s2的引用已经被修改,它和s1没关系了)
String s1 = "s1";
String s2 = s1;
s2 = "s2";//s1指向的对象中的字符串是什么?
System.out.println(s1);//输出结果是s1