Java:为什么String被称为不可变字符串?
很多东西,看似可变,实际上不过是是新桃换旧符罢了。
String可以使用 =,或 + 重新赋值。
看似一个对象在变化,实际上是丢弃了以前的对象,创建了新的String对象。
而StringBuilder 、 StringBuffer不会丢弃之前的String对象,所以称为可变字符串,StringBuffer线程安全,StringBuilder效率高。
测试代码:
static void testString(){ String str = "i love"; System.out.println(str+"地址是:"+System.identityHashCode(str)); str = str+" you"; System.out.println(str+"地址是:"+System.identityHashCode(str)); StringBuffer strBuffer =new StringBuffer("i love"); System.out.println(strBuffer+"地址是:"+System.identityHashCode(strBuffer)); strBuffer.append(" you"); System.out.println(strBuffer+"地址是:"+System.identityHashCode(strBuffer)); }
运行结果:
字符序列(CharSequence)的关系图: