标签:abc 常量 StringBuilder s1 池中 str StringBuffer String
(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修饰的字符数组
标签:abc,常量,StringBuilder,s1,池中,str,StringBuffer,String 来源: https://www.cnblogs.com/pdjdghrs/p/15673912.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。