00018.02String对象个数还有拼接问题——intern()方法——空字符串和空字符串对的判断
系列文章目录
文章目录
前言
字符串对象的个数,这也是在面试的过程中会被经常被问到的一个问题
一、字符串对象的个数
一个字符串对象
为什么是两个字符串对象?
一个是常量池里面,一个是堆里面
一个在常量池中:hello
另一个在堆中,String的对象
那么它们俩有关联吗?有
堆中的这个字符串对象char[]的value数组,指向常量池中"hello"的char[]的value
二、字符串的拼接问题
大胆的猜测一下,都是true?
为什么是这样呢?
现在我们要研究一个话题了,字符串拼接的结果到底是在堆里面还是在常量池里面
因为只有在常量池中才是共享的 ==才会是true
如果我们加上final 结果会有什么不同呢
因为加了final 就全部是常量了
加上intern()方法再看
intern()的意思就是把拼接的结果放到常量池
字符串拼接的结果到底是在堆里面还是在常量池里面,已经有结论了:
(1)常量 + 常量在常量池
(2)变量 +常量在堆
(3)变量 + 变量在堆
(4)xx.intern():在常量池
三、空字符串的问题
自己判断一下哪些是空字符串?
后面的这三个都是空字符串,他们的长度都是0
空字符串的形式有三种:
(1)""
(2)new String()
(3)new String("")
我们现在知道什么是空字符串了,但是我们再怎么去判断是不是空字符串呢
不啰嗦了,总共是四种方式:
(1)if(str != null && str.length() == 0)
(2)if(str != null && str.equals("")){
(3)if("".equals(str)) 推荐
(4)if(str!=null && str.isEmpty())
第三种判断方法 就一个字:“高级”
有空可以看看代码优化的书籍,然后你就会发现你变成了大神
注意
1、即使是空字符串的判断也是有讲究的
2、直击面试题
(1)String str = new String(“hello”);几个对象
(2)String str1 = new String(“hello”);
String str2 = new String(“hello”);几个对象
看完这篇文章我相信你已经有了自己的答案