(1)String
1. 原理:
String是不可变的字符串,他的底层是final修饰的字符数组。
2. 常量池和堆图示
3. 案例说明问题
4. String对象赋值原理:
(1)常规方式:String str = "Cat";
1. String对象赋值后,字符串常量会缓存在常量池中
2. 如果下次创建字符对象会判断常量池中是否已经有缓存,如果有直接返回该引用给创建者。
3. s1 == s2 ,结果为true为佐证
(2)new的方式:new String("Cat");
1. 如果常量池中“Cat”已存在,则会在堆内存中创建一个。如果常量池中不存在,则在常量中创建一个,堆内存创建一个()
2. s1 == s3,结果为false佐证
5.字符串拼接原理
String str = "you";
str = str + "win";
拼接后str直接指向"you win"。
6. String s1 = "abc" 与String s1 = new String("abc")的区别?
区别:
1. String s1 = "abc",地址值指向常量池中"abc"的地址,new String("abc")地址值指向的是堆中的地址值。
2.StirngBuilder和StringBuffer
(1)区别:
1.StringBuffer是线程安全的(方法被同步了),StringBuilder是线程不安全的
2.StringBuffer执行效率低,StringBuilder执行效率高
(2)相同点:
1.底层都是未被final修饰的字符数组