?
?在今天看的java特种兵中,主要看了前面几小结。作者重点讲了String。总结的实例代码如下:
?
public class Day{ private static String getA(){ return "a";} private static void method1(){ String a ="a"+"b"+1; String b ="ab1"; System.out.println(a==b);//a,b均为常量,在编译时就已经确定 } private static void method2(){ String a ="a"; final String c ="a"; String b =a+"b"; String d=c+"b"; String e=getA()+"b"; String compare ="ab"; System.out.println(b==compare);//b中a是变量,虽然初始化为"a" System.out.println(d==compare);//d中c也是变量,但它是final的,所以会认为d是常量 System.out.println(e==compare);//e为方法 不会是常量,虽然返回的是常量,编译时不会查看方法,因为有可能返回的是变量 System.out.println(a==c); } private static void method3(){ String a="a"; String b=a+"b"; String c="ab"; String d = new String(b); System.out.println(b==c); System.out.println(c==d); System.out.println(c==d.intern());//intern方法会在常量池里查找,所以会是相同的常量 System.out.println(b.intern()==d.intern()); } public static void main(String[] args){ method1(); method2(); method3(); } }
?
?
----------------------------------------------
运行结果为:
true
false
true
false
true
false
false
true
true
原文:http://uncle-panda.iteye.com/blog/2235785