String是一个很普通的类 - Java那些事儿

上一篇咱们讲了Java中的数组,实际上是为本章的内容作准备的,String这个类是咱们在写Java代码中用得最多的一个类,没有之一,今天咱们就讲讲它,咱们打开String这个类的源码:java

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

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

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

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

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

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

继续上图对象

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

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

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

很简单对吧,可怕的不是源码难读,而是不想,惧怕去读源码的心。若是文章获得了你的承认,请为个人文章点赞,你的赞同是我继续下去的动力。

注:文中的图,只是画对象在JVM中大体的样子,以方便你们理解。若是你们想更深层次的研究JVM,推荐你们看深刻理解java虚拟机一书。


若是喜欢本系列文章,请为我点赞或顺手分享,您的支持是我继续下去的动力,您也能够在评论区留言想了解的内容,有机会本专栏会作讲解,最后别忘了关注一下我。

上一篇:Java中的数组 - Java那些事儿

下一篇:Java基本数据类型和引用类型 - Java那些事儿


转载无限欢迎,但请注明「做者」和「原文地址」。转载请在文中保留此段,感谢您对做者版权的尊重。如需商业转载或刊登,请联系做者得到受权。

相关文章
相关标签/搜索