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

你可能感兴趣的:(java,string)