![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
文章平均质量分 70
学未者
宝剑锋从磨砺出,梅花香自苦寒来。
展开
-
Thread类join方法
首先打开源码查看join()方法: public final void join() throws InterruptedException { join(0); }原创 2021-06-10 23:08:04 · 252 阅读 · 0 评论 -
String源码-04
继续分析: 分析:为什么出现上面的结果呢?这是因为,字符串字面量拼接操作是在Java编译器编译期间就执行了,也就是说编译器编译时,直接把"java"、"language"和"specification"这三个字面量进行"+"操作得到一个"javalanguagespecification" 常量,并且直接将这个常量放入字符串池中,这样做实际上是一种优化,将3个字面量合成一个,避免了创建多余的字符串对象。而字符串引用的"+"运算是在Java运行期间执行的,即s0+ s1+ s2在程序执行期间才会进行..原创 2021-05-21 22:16:18 · 59 阅读 · 0 评论 -
String源码-03
继续分析: 分析:用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。 a0还是常量池中"helloworld”的引用,a1因为无法在编译期确定,所以是运行时创建的新对象"helloworld”的引用,a2因为有后半部分new String(”world”)所以也无法在编译期确定,所以也是一个新创建对象"helloworld”的引用。只要出现new就是新创建对象在堆中,这两个对象肯定不相等。 分析原创 2021-05-20 23:28:34 · 70 阅读 · 0 评论 -
String源码-02
接着分析String类: 我们知道字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多。JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。(类似于缓存)每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串...原创 2021-05-18 23:33:05 · 77 阅读 · 4 评论 -
String源码-01
首先用IDEA打开String类: 1.string类是final的不可被继承,并且String类中的成员方法都默认是final方法。String类一旦被创建,就无法改变,对String对象的任何操作都不会影响到原对象,任何的change操作都会产生新的String对象。 2.string类实现了Serializable,Comparable,CharSequence 接口 3.string 源码中包含一个 不可变的char数组来存放字符串 private final char value[];.原创 2021-05-12 23:28:29 · 79 阅读 · 2 评论