今天我们就讲讲它,我们打开String这个类的源码:String源码分析

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

String源码分析

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

String源码分析

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

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

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

String源码分析

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

String源码分析

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

String源码分析

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

String源码分析

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

String源码分析String源码分析String源码分析String源码分析String源码分析String源码分析String源码分析

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-07
  • 2021-11-23
猜你喜欢
  • 2021-04-10
  • 2021-07-10
  • 2021-06-01
  • 2021-06-06
相关资源
相似解决方案