熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

在String中==和equals的區別

2013-11-23 18:49:55  來源: Java核心技術 
下面是源代碼(存為Java文件編譯運行推敲下結果)


public class DosShell {

    public static void main(String[] args) {
        // 開始測試了
        Systemoutprintln(Hello world);
        //定義兩個對象並初始化
        String c = Check equal method;
        String d =Check ;
        //這樣d 和 c是一樣的麽?
        d += equal method;
        Systemoutprintln(cequals(d)的結果並不表示c和d到底是不是引用的一個對象因為它被重載了結果+ (cequals(d)));   
        Systemoutprintln(c==d的結果表示c和d到底是不是引用的一個對象結果+ (c==d));   
      //intern方法是干什麼的呢?原來是返回 常量池 中的常量的引用(如果沒有就創建一個)那麼下面的結果是什麼呢?
        Systemoutprintln(use intern method c==cintern()> + (c==cintern()));
        Systemoutprintln(use intern method d==cintern()> + (d==cintern()));
        Systemoutprintln(use intern method c==dintern()> + (c==dintern()));
        Systemoutprintln(use intern method d==dintern()> + (d==dintern()));
        //原來c直接是引用的常量池中而d不是難怪c!=d;
        
    //下面這個簡單
        String s = ;
        String s = ;
        Systemoutprintln(String s = \\String s = \\);
        Systemoutprintln(s==s: + (s==s));
        Systemoutprintln(sequals(s): + sequals(s));
        Systemoutprintln(shashCode()==shashCode(): + (shashCode()==shashCode()));
        //讓s的引用變一下
        s = ;
        Systemoutprintln(s = \\;);
        Systemoutprintln(s==s: + (s==s));
        Systemoutprintln(sequals(s): + sequals(s));
        Systemoutprintln(shashCode()==shashCode(): + (shashCode()==shashCode()));
        //原來都是true都是引用的常量池如果這樣呢?
        s = new  String();
        Systemoutprintln(s = new  String(\\););
        Systemoutprintln(s==s: + (s==s));
        Systemoutprintln(sequals(s): + sequals(s));
        Systemoutprintln(shashCode()==shashCode(): + (shashCode()==shashCode()));
        //new 方法在堆中創建了一個新的對象而s引用了它不再是原來引用的常量池了
        
        //看看這個結果        
        s = new String();
        Systemoutprintln(s);
        //這個語句相當於s = new String();和下面的不一樣        
        String s = null;
        Systemoutprintln(s);
        //再來看看intern方法說明了什麼??
        String s = new String();
        Systemoutprintln(use intern method s==sintern()> + (s==sintern()));
        //new 在堆創建了了個對象當然和常量池的不一樣了啊   

    }
}本文出自 CTOCOM技術博客
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25812.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.