1. 画出如下几行代码的内容结构:
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
s1 += “world”;
注意:这里 s1 += “world”; 相当于 s1 = s1 + “world”; ,有变量参与。
2. 如何理解String类的不可变性
- 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
- 当对现有的字符串进行连接操作,也需要重新指定内存区域,不能使用原有的value进行赋值。
- 当调用String的 replace() 方法修改指定字符或字符串时,也需要重新指定内存区域。
3. String类是否可以被继承?为什么?
声明为 final,不可继承。
4. String s = new String(“hello”);在内存中创建了几个对象?请说明
2个,堆空间一个,常量池一个。
5. String,StringBuffer,StringBuilder三者的对比
String(JDK1.0):不可变字符序列,底层使用char[]存储
StringBuffer(JDK1.0):可变字符序列、效率低、线程安全,底层使用char[]存储(可扩容)
StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全,底层使用char[]存储(可扩容)
6. String的常用方法有哪些?(至少7个)
length() / charAt() / equals() / compareTo() / startsWith() / endsWith()
containts() / indexOf() / lastIndexOf() / getBytes() / toCharArray() / valueOf() / ….