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”);几个对象
看完这篇文章我相信你已经有了自己的答案

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值