1、 String、StringBuffer、StringBuilder三者有什么区别
String
: 不可变的字符序列;底层使用char[]存储;占用内存(会不断的创建和回收对象)
StringBuffer
:可变的字符序列;底层使用char[]存储;线程安全的,效率低;
StringBuilder
:可变的字符序列;底层使用 char[]存储,jdk5.0新增的,线程不安全的,效率高;
执行效率 StringBuilder
> StringBuffer
> String
2、String s = new String(“abc”);方式创建对象,在内存中创建了几个对象?
创建了两个对象,一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:“abc”
3、字符串常量池
- 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
- 只要其中一个是变量,结果就在堆中。
- 如果拼接的结果调用
intern()
方法,返回值就在常量池中
4、String类与其他结构的转换
- String与基本数据类型、包装类之间的转换
String --> 基本数据类型、包装类:调用包装类的静态方法:parseXxx
(str)
基本数据类型、包装类 --> String:调用String重载的valueOf
(xxx)
public void StringToBasic() {
String str1 = "123";
int i = Integer.parseInt(str1);
System.out.println(i);
System.out.println(i == 123);//true
int j = 456;
String s = String.valueOf(j);
System.out.println(s); System.out.println(s.equals("456"));//true
- 与字符数组之间的转换
String --> char[]:调用String的toCharArray()
char[] --> String:调用String的构造器