1. String 是基本数据类型吗?
不是。Java中的基本数据类型只有8个:byte, short, int, long, float, double, char, Boolean.除了基本数据类型,其他的都是引用数据类型。
基本数据类型:数据直接存储在栈上。
引用数据类型:数据存储在堆上,栈上只存储引用地址。
2. String类可以被继承吗?
不行,String类使用final修饰,无法被继承。
3. String和StringBuffer、StringBuilder的区别?
String:String的值被创建后不能修改,任何对String的修改都会引发新的String对象生成。
StringBuffer:跟String类似,但是值可以被修改,使用synchronized来保证线程安全。
StringBuilder:StringBuffer的非线程安全的版本,没有使用synchronized,具有更高的性能,推荐优先使用。
4. String s = new String(“xyz”) 创建了几个字符串对象?
一个或两个。如果字符常量池已经有“xyz”,则是一个;否则两个。
当字符常量池没有“xyz”,此时会创建如下两个对象:
一个字符串字面量“xyz”所对应的、驻留在一个全局共享的字符串常量池中的实例,此时该实例也在堆中,字符串常量此只放引用。
另一个是通过new String()创建并初始化的,内容与“xyz”相同的实例,也是在堆中。