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

在创建字符串,我们可以用到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);//true
		System.out.println(a==c);//false
		System.out.println(a==d);//false
		System.out.println(a==d.intern());//true
		System.out.println(c==d);//false</span>



你可能感兴趣的:(java,String,对象,存储)