String为空的细节

先上结论:字符串为空有两种情况,第一种是只引用,没有创建实现对象,
第二种,赋值为空字符串

首先需要了解字符串的构建过程:

1.String s1 = "abc"; // 第一次使用 "abc"会在串池中创建
String s2 = "abc"; // 第二次使用时,直接获取串池中已经存在的 "abc"
s1==s2 // true
2.String s3 = new String("def");
|- 堆空间中构建一个 "def"对象(s3默认保存堆空间中对象地址)
|- 串池中构建一个"def"对象
s3 = s3.intern(); // s3 指向串池中 "def"
3.String s4 = null;
s4.lenght();
//此时没有指向,在调用时会报空指针异常

看一道常见的面试题:

new String(“a”) + new String(“b”) 会创建几个对象?

对象1new StringBuilder()
对象2new String("a")
对象3:常量池中的"a"
对象4new String("b")
对象5:常量池中的"b"
深入剖析:StringBuilder中的toString():
对象6new String("ab")

强调一下,toString()的调用,在字符串常量池中,没有生成"ab"

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值