- 博客(6)
- 收藏
- 关注
原创 谈谈String.intern方法
1. 首先明确什么是intern()方法?String.intern()是一个Native方法,底层调用C++的 StringTable::intern方法实现。当通过语句str.intern()调用intern()方法后,JVM 就会在当前类的常量池中查找是否存在与str等值的String,若存在,则直接返回常量池中相应Strnig的引用;若不存在,则会在常量池中创建一个等值的String,然后返回这个String在常量池中的引用。2. intern()方法在jdk6和jdk(7/8)的区别(1)在
2021-07-06 22:03:48
8535
2
原创 String的不可变性
文章开始之前,我们首先要明白的一点就是String在jdk8以前内部定义了fianl char[] value用于存储字符串数据。jdk9时改为byte[] value,所以无论怎样String的存储形式都为一个数组,数组一旦确定他就不可扩容了,所以才会有了String的不可变性总结一下String字符串的基本特性中的不可变性三类:1. 当对String字符串进行重新赋值时,需要重新指定内存区域进行赋值,不能使用原有的Value进行赋值2. 当对现有的String字符串进行拼接操作时,也需要重新指定
2021-07-04 11:50:39
240
原创 静态变量、实例变量、局部变量在JVM中存放的位置
文章目录静态变量、实例变量、局部变量在JVM中存放的位置静态变量、实例变量、局部变量在JVM中存放的位置总结一下这三种变量在JVM中存放的位置,首先看一段代码:public class StaticObjTest { static class Test{ static ObjectHolder staticObj = new ObjectHolder(); ObjectHolder instanceObj = new ObjectHolder();
2021-06-30 22:18:10
3119
2
原创 栈中对象引用指向堆内存的方式
栈中对象引用指向堆内存的方式在我们用new创建对象的时候,例如 Person p = new Person();其中栈中的p指向堆内存中的 new Person()的方式有两种:直接指向变量 p 直接指向 堆中实例数据 对象保存方法区 类型数据指针,直接的访问实例数据句柄池变量 p 保存了指向句柄池的指针,由句柄池中的实例数据和类型数据指针,间接的访问实例和类型数据总结:直接指向当堆内存中的对象实例在进行垃圾回收时,地址会发生变动,我们需要改变栈中的引用,但访问对象只需要经过一步句柄
2021-06-30 21:46:26
557
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人