String是一个很普通的类

String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码:

声明了一个char[]数组,变量名value,声明了一个int类型的变量hash(hash的作用我们后续会讲),话不多说,上代码:

我们点开构造函数看一下:

多年以前,我看到这段代码时我是懵逼的,没错,我现正在准备构造一个String的对象,那original这个对象又是从何而来?是什么时候构造的呢?

在Java中,当值被双引号引起来(如本示例中的"abc"),JVM会去先检查看一看常量池里有没有abc这个对象,如果没有,把abc初始化为对象放入常量池,如果有,直接返回常量池内容。下图是预先处理String str = new String("abc")的参数"abc"

接下来处理new关键字,在堆内存中开辟空间,由于hash这个字段是int类型的,成员变量初始化默认值为0。

处理构造函数逻辑,hash是值类型,直接赋值,数组为引用类型,直接指向地址。

继续上图

最后执行String str2 = new String("abc"),结果如下图:

利用IDE的debug功能看一下,char数组里已经有了'a','b','c'这些值。

下面我们来看一下String这个类下面这些常用的API是如何实现的:

很简单对吧,可怕的不是源码难读,而是不想,害怕去读源码的心。如果文章得到了你的认可,请为我的文章点赞,你的赞同是我继续下去的动力。

 

往期回顾:

动力节点:让人疑惑的Java代码

动力节点:动力节点Java学院整理——十大常见Java String问题

动力节点:极速掌握MySQL储存过程

动力节点:Spring Cloud微服务架构一站式解决方案

小白写博客不容易,希望各位兄弟们,点赞评论收藏加关注。小白在此谢谢各位老爷们。有需要的小伙伴可以+企鹅裙:485130039【暗号:javase】
在这里插入图片描述
对于白嫖的兄弟们
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值