您的位置:首页 > 编程语言 > Java开发

学习java String类

2006-06-16 23:51 405 查看
class A
{
   static String lock1 ="mylock";
  
   String lock11="mylock";
}

 class B
{
    static String lock2=new String("mylock");
    static String lock3="mylock";
   
    String lock22=new String("mylock");
    String lock23="mylock";
}

public class HelloWorld {

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO 自动生成方法存根
        System.out.println("你好");
       
        String a = "Hello";
        String b = "Hello";
        String c = "HelloHello";
        String d = "Hello" + "Hello";
        String e = "Hell" + "oHello";
        String f = a + b;
        String g = a+"Hello";

        System.out.println("c == d : " + (c == d));  // true
        System.out.println("c == e : " + (c == e));  // true
        System.out.println("c == f : " + (c == f));   // false
        System.out.println("c == g : " + (c == g));   //false
有这样一个规则:
(1) 当 = 的右边全是字符串常量,那么 = 左边的变量(左值)也成为字符串常量。
(2) 当 = 的右边包含字符串变量(或其它变量),那么 = 左边的变量(左值)也成为字符串变量(StringBuffer().append()...的结果)。
原因:编译器优化,右边全是常量运算,则生成一个常量;字符串常量不同于字符串变量,字符串变量常量存于 类常量池 Class Constant Pool中,对于同一个常量的引用相等。

       System.out.println(A.lock1.equals(B.lock2));   // true : 值的比较
       System.out.println(A.lock1==B.lock2); //false:引用的比较,new出来的String对象的引用!=同值常量的引用
       System.out.println(A.lock1==B.lock3); //true:对于不同的类的Class Constant Pool,可以发生Same String constant reference
      

        A obj_a=new A();
        B obj_b=new B();
        System.out.println(obj_a.lock11==obj_b.lock22);   //false  
        System.out.println(obj_a.lock11==obj_b.lock23);   //true
//原因:同上。对类成员、对象成员同时成立。                  
    }
}

参考:http://forum.javaeye.com/viewtopic.php?t=11649&postdays=0&postorder=asc&start=30
               http://forum.javaeye.com/viewtopic.php?t=12961&postdays=0&postorder=asc&start=0&sid=9505d8ef70ecce0626907531c025b884 http://dreamhead.blogbus.com/logs/2005/05/1189478.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息