String字符串对象的创建及管理

来源:互联网 发布:淘宝上架时间周期 编辑:程序博客网 时间:2024/05/30 05:42

在创建字符串,我们可以用到new String("*****")或者直接=“******”两种形式,两种形式有着很大的区别。

1.单独使用""引号创建的字符串都是常量,编译期就已经确定存储到String Pool中;

2.使用new String("")创建的对象会存储到heap中,是运行期新创建的;

3.使用只包含常量的字符串连接符如"aa" + "aa"创建的也是常量,编译期就能确定,已经确定存储到String Pool中;

4.使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在heap中;

5:只用""引号创建的字符串创建一个或者零个对象,比如String a="123",如果String pool不存在"123",则创建一个String对象"123"放到String pool中,如果存在,则a的引用直接指向它。

6:用new关键字至少创建一个对象,比如 String a=new String("123")首先会创建一个对象存储在heap中,如果String pool中不纯在"123"则创建一个String对象"123"放到String pool中,如果存在,则不创建。

7:String.intern()方法返回字符串对象的规范化表示形式,当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

<span style="font-size:18px;">   String a="123";String b="123";String c=new String("123");String tem="12";String d=tem+"3";System.out.println(a==b);//trueSystem.out.println(a==c);//falseSystem.out.println(a==d);//falseSystem.out.println(a==d.intern());//trueSystem.out.println(c==d);//false</span>



0 0