乐趣区

关于java:Java中String类的赋值过程

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

退出移动版