JavaJVM-String.intern()的理解,面试题

String基本特性

不可变性,一旦创建了一个String字符串将不可改变当前对象的内容.

对字符串的修改是,将在内存中重新分配一块空间

String的内存分配

字符串常量在字符串常量表中

通过new 产生一个字符串对象时 将在堆空间new一个String对象

String基本操作

……

字符串拼接操作

在创建一个字符串对象时,底层将会产生两个对象

在堆中的String,和字符串常量表中的. 实现在字符串常量表中创建常量

字符串在拼接时,

# intern() 的理解

判断字符串常量表中是否存在当前常量.

如果有则返回目标地址,如果没有则在常量表中创建一个常量 并返回地址

JDK6 和 JDK7/8… 对intern() 的底层处理有着略微的差异.

JDK6 执行intern是当发现常量表中没有目标常量时.会在常量表中创建一个新的字符串

而在JDK7/8…中会将当前对象的地址存放到常量表中 常量表中和当前对象指向同一个地址 使用== 结果为true