本文共 1075 字,大约阅读时间需要 3 分钟。
1. 字符串驻留池,就是一块与堆区并行的存放字符串对象的内存区,JVM的驻留池机制规定:
在池中创建一个String对象,第二行会先在池中寻找是否有值与"abc"相同的String对象,如果有,就直接引用,没有这在池中新建String对象 1. JVM 为了提高性能,会将形式例如:String str = "我是字符串" 和 “我也是字符串” 的 字符串存放在一个名叫:字符串驻留池的内存块中。
3 . " == " 判断两个字符串对象时 : 当两个字符串对象完全相同时 返回true , 当内容不同或者 不是同一个对象时返回false
public static void main(String[] args)
String str1 = new String("字符串1"); // str1对象存放在堆里
String str2 = "字符串1" ; // str2 对象是存放在驻留池
String str3 = new String ("字符串3");
str3 = str3.intern(); // 通过intern把new创建的对象str3放入驻留池
String str4 = "字符串3" ; // JVM会将str4 指向str3在驻留池创建的对象
if(str1 == str2) // 很明显 str1 和 str2 虽然是相同内容,但是不是同一对象。
System.out.println("str1 == str2");
System.out.println("str1 != str2");
if(str3 == str4) // JVM的字符串驻留机制 str3 str4 是同一个对象
System.out.println("str3 == str4");
System.out.println("str3 != str4");
}
str1 != str2 // str1 str2 引用的对象不是同一个对象。
str3 == str4 //
表明使用驻留后的str3 str4 引用的对象是同一个对象。 String str = new String ("King"); 问: 这句话创建了几个对象? 答案: 2个 一个由new 在堆区产生 另一个在 驻留池中产生 转载地址:http://fgalf.baihongyu.com/