当new一个String对象时,JVM会在内存中创建一个String对象,当另外一个String对象值与它一样时,会将该对象直接指向对应的地址。
1
2
3
|
String a = "abc";
String b = "abc";
System.out.println(a == b);//true
|
StringBuffer的toString方法,本质上是返回一个String类型,这个结果由 StringBuffer类中的toStringCache[ ]数组构成的,是value[ ]的拷贝,并不影响StringBuffer类主体的value[ ]部分。
这是刚实例化StringBuffer的时候
这是调用tostring方法以后
至于B、C选项,String类没有append方法,StringBuffer不能直接赋值。
至于D答案:String类是不可变的,首先被设计成一个final类,不可继承,value这个变量是private的,并且没有提供setValue, 等公共方法来修改这些值,所以在String类的外部无法修改String。也就是说一旦初始化就不能修改, 并且在String类的外部不能访问这个成员。此外,value这个变量是final的, 也就是说在String类内部,一旦这个值初始化了, 也不能被改变。
但其实可以通过反射的方法修改String的值,这里就不多说了。