一、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”,供程序应用。匿名对象就在堆内存中无援用指向他,所以他就成了内存中的垃圾对象。占用程序内存。