朋友问我String的内容是真的不可变吗?我肯定告诉他是的?因为在我的主观意识里String是一个不可变的对象。于是他给我发了这段程序:

 

public class StringTest {
public static void main(String[] args) throws Exception {
String a = "chenssy";
System.out.println("a = " + a);
Field a_ = String.class.getDeclaredField("value");
a.setAccessible(true);
char[] value=(char[])a.get(a);
value[4]='_';   //修改a所指向的值
System.out.println("a = " + a);
}
}

  看到这个简单的程序,我笑了,你这不是从底层来修改String的值么?从这里来理解String的值肯定是可以改变的啦(我们应该始终相信String的不可变性)!接着他再给我一段程序:

 

public class StringTest {
public static void main(String[] args) throws Exception {
String a = "chenssy";
String b = "chenssy";
String c = new String("chenssy");
System.out.println("--------------修改前值-------------------");
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
//修改String的值
Field a_ = String.class.getDeclaredField("value");
a_.setAccessible(true);
char[] value=(char[])a_.get(a);
value[4]='_';   //修改a所指向的值
System.out.println("--------------修改后值-------------------");
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("chenssy");
System.out.println("c = " + c);
}
}