public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
privatefinalchar value[];
privateint hash; }
String其实是对一个char数组的封装。提供了各种操作方法。值得注意的是这个数组的final的,也就是这个引用是不可变的。注意是引用,数组中每一项的值理论上是可以改变的,比如通过反射,但是不推荐这么做。
package terry.java.base; publicclass StringTest { publicstaticvoid main(String[] args) { String a = "hello"; String b = "hello"; String newA = new String("hello"); String newB = new String("hello"); System.out.println("****** Testing Object == ******"); System.out.println("a==b ? :" + (a==b)); System.out.println("newA==newB ? :" +(newA==newB)); System.out.println("a==newA ? :" + (a==newA)); System.out.println("***** Testing String Object intern method******"); System.out.println("a.intern()==b.intern() ? : " + (a.intern()==b.intern())); System.out.println("newA.intern()==newB.intern() ? :" + (newA.intern()==newB.intern())); System.out.println("a.intern()==newA.intern() ? :" + (a.intern()==newA.intern())); System.out.println("a=a.intern() ? :" + (a==a.intern())); System.out.println("newA==newA.intern() ? : " + (newA==newA.intern())); System.out.println("****** Testing String Object equals method******"); System.out.println("equals() method :" + a.equals(newA)); String c = "hel"; String d = "lo"; final String finalc = "hel"; final String finalgetc = getc(); System.out.println("****** Testing Object splice ******");2 System.out.println("a==\"hel\"+\"lo\" ? :" + (a=="hel"+"lo")); System.out.println("a==c+d ? : " + (a==c+d)); System.out.println("a==c+\"lo\" ? : " + (a==c+"lo")); System.out.println("a==finalc+\"lo\" ? :" + (a==finalc+"lo")); System.out.println("a==finalgetc+\"lo\" ? :" + (a==finalgetc+"lo")); } privatestatic String getc(){ return"hel"; } }
****** Testing Object == ****** a==b ? :true newA==newB ? :false a==newA ? :false ***** Testing String Object intern method****** a.intern()==b.intern() ? : true newA.intern()==newB.intern() ? :true a.intern()==newA.intern() ? :true a==a.intern() ? :true newA==newA.intern() ? : false ****** Testing String Object equals method****** equals() method :true ****** Testing Object splice****** a=="hel"+"lo" ? :true a==c+d ? : false a==c+"lo" ? : false a==finalc+"lo" ? :true a==finalgetc+"lo" ? :false
原文:http://www.cnblogs.com/endlu/p/5159360.html