一、String 不是根本数据类型
String 类是 java 中操作字符串的类。
java 的 8 大根本数据类型:
1.byte 2.short 3.int 4.long 5.boolean 6.float 7.double 8.char
二、查看 String 类定义的 jdk 源码
jdk1.8 定义的是字符数组
private final char value[];
jdk1.9 定义的是字节数组
private final byte[] value;
源码剖析:
从源码能够看出,字符串就对数组的一种包装利用,java 程序的底层外面提供有一个专门的字符串对象池。(也就是字符串数组,实质也是 堆内存)
三、String 类实例化的两种形式(重点看这里)
1. 间接赋值
在采纳间接赋值的处理过程之中,能够主动将对象保留到字符串对象池中,这样如果有雷同数据定义时,首先会去找字符串对象池中是否有雷同的对象,如果有就间接指向他,这样能够实现对象的重用,从而缩小对象的产生。
例如:
String a = "aishu"; // 间接赋值
String b = "aishu";// b 指向的“aishu”与 a 指向的“aishu”是字符串词中的同一个数据。a == b; // true
2. 构造方法实例化
- 会产生两个实例化对象其中一个是匿名对象(在堆内存中,并且在栈内存中无援用指向他,所以便产生了垃圾对象)。另一个是 new 进去的对象,供程序应用。
- 不会主动保留到对象池中,无奈实现对象的重用
- 能够调用 intern()办法手动将其保留到对象池中
应用以下例子具体分析:
String a = new String("aishu");// 构造方法实例化
内存剖析:
“aishu” 在程序中是一个在堆内存中的匿名对象,而后用 new 开拓了一个新的堆内存寄存“aishu”, 供程序应用。匿名对象就在堆内存中无援用指向他, 所以他就成了内存中的垃圾对象。占用程序内存。