1.String的创建机理
由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池。其运行机制是:
创建一个字符串时,首先检查池中是否有值相同的字符串对象,如果有则不需要创建直接从常量池中刚查找到的对象引用;如果没有则新建字符串对象(非new String方式),返回对象引用,并且将新创建的对象放入池中。 但是,通过new方法创建的String对象是不检查字符串池的,而是直接在堆区或栈区创建一个新的对象,也不会把对象放入池中。上述原则只适用于通过直接量给String对象引用赋值的情况。
举例:
String str1 = "123"; //通过直接量赋值方式,放入字符串常量池
String str2 = new String(“123”); //通过new方式赋值方式,不放入字符串常量池
注意:String提供了intern()方法。调用该方法时,如果常量池中包括了一个等于此String对象的字符串(由equals方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并且返回此池中对象的引用。
String s3 = new String("12") + new String("34");
s3.intern(); // 有这句时打印为true 没有时打印为false
String s4 = "1234";
System.out.println(s3 == s4);
网友评论