例子
String str = "test1";
System.out.println(str); // test1
str = "test2";
System.out.println(str); // test2
str = str.substring(1);
System.out.println(str); // est2
注意:str只是一个引用,并不是字符串本身,所以上面体现只是改变了str引用的内容,并没有改变字符串本身
源码剖析
public final class String ----String 不能被继承 implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; ---不能通过外界修改,即不可变 /** Cache the hash code for the string */ private int hash; // Default to 0
黑科技改变字符串
String str = "Hello";
System.out.println(str); // Hello Python
Field field = String.class.getDeclaredField("value");
field.setAccessible(true);
char[] value = (char[])field.get(str);
value[0] = 'J';
value[1] = 'a';
value[2] = 'v';
value[3] = 'a';
value[4] = '!';
System.out.println(str); //Java!
总结:通过反射可以修改字符串的值,但违反了字符串不可变的设计初衷