public class test {
public static void main(String[] args) {
String st = "i love u";
st = st + " more";
System.out.println(st); String st1 = new String("i love u");
st1 = st1 + st;
System.out.println(st1); st1 = st1.substring(0,7);
System.out.println(st1);
}
}
看上面的程序string对象都已经被改变了,突然脑袋转不过弯来,那么string的immutable又体现在什么地方呢?
就比如例子操作后返回的值并不是原来的对象,而是新产生的一个String对象。
i love ui love u more
i love
String st = "i love u";
System.out.println(st.hashCode());
st = st + " more";
System.out.println(st.hashCode());
System.out.println(st);
String st1 = new String("i love u");
System.out.println(st1.hashCode());
st1 = st1 + st;
System.out.println(st1.hashCode());
System.out.println(st1);
st1 = st1.substring(0,7);
System.out.println(st1.hashCode());
System.out.println(st1);
而对于st1.substring(0,7);这句,如果LZ不是把st1.substring(0,7);的结果再赋给st1的话,st1的hashCode与内容都不会变,每对String类型赋一次值,hashCode都在变化,相当于什么LZ想过没有?
st = st + " more";
System.out.println(st);
其实对于改变的是st变量,不是String对象。简单做个这样的实验
String st = "i love u";
String old = st;//让old去应用原有的String对象
st = st + " more";
System.out.println(st);
System.out.println(old);//如果string对象还是“i love u”,就表明原String对象没有改变