程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 基於Java字符串 == 與 equals 的深刻懂得

基於Java字符串 == 與 equals 的深刻懂得

編輯:關於JAVA

基於Java字符串 "==" 與 "equals" 的深刻懂得。本站提示廣大學習愛好者:(基於Java字符串 "==" 與 "equals" 的深刻懂得)文章只能為提供參考,不一定能成為您想要的結果。以下是基於Java字符串 "==" 與 "equals" 的深刻懂得正文


固然關於Java字符串“==”和“equals”的成績是Java進修中的最基本的一個成績,然則依然有很多方才進修Java的同窗弄不清晰外面的道理,比來和同伙評論辯論到這個成績,所以寫篇文章給年夜家分享一下我本身的懂得。
起首讓我們看一個例子:

    public class TestStringEquals { 

        public static void main(String[] args) { 

            String a = "test"; 
            String b = "test"; 
            String c = new String("test"); 
            String d = new String("test"); 
            String e = a; 
            String f = new String(a); 
            String g = a + ""; 
            System.out.println(a == b ? "expression \"a==b\" is true" 
                    : "expression \"a==b\" is false"); 
            System.out.println(a == c ? "expression \"a==c\" is true" 
                    : "expression \"a==c\" is false"); 
            System.out.println(c == d ? "expression \"c==d\" is true" 
                    : "expression \"c==d\" is false"); 
            System.out.println(a == e ? "expression \"a==e\" is true" 
                    : "expression \"a==e\" is false"); 
            System.out.println(a == f ? "expression \"a==f\" is true" 
                    : "expression \"a==f\" is false"); 
            System.out.println(a == g ? "expression \"a==g\" is true" 
                    : "expression \"a==g\" is false"); 
            if (a.equals(b) && b.equals(c) && c.equals(d) && d.equals(e) 
                    && e.equals(f) && f.equals(g)) { 
                System.out 
                        .println("a equals b equals c equals d equals e equals f equals g"); 
            } 
        } 

    } 

假如先不謎底,年夜家試著去做一做,可否包管全體准確呢?
上面頒布一下謎底:

    expression "a==b" is true 
    expression "a==c" is false 
    expression "c==d" is false 
    expression "a==e" is true 
    expression "a==f" is false 
    expression "a==g" is false 
    <div ></div>a equals b equals c equals d equals e equals f equals g 

要很好的懂得這類標題,最好的方法就是深刻懂得Java中String的“==”辦法和“equals”辦法的機制和道理。“equals”想必年夜家都曉得,就是比擬字符串的內容,因為以上法式中的一切字符串內容都是“test”,所以用equals比擬它們都邑相等。

然則你能否曉得Java中基類Obejct的equals辦法跟“==”辦法實際上是分歧的呢?只不外是String類繼續Object類(Java中一切的類都是繼續Object類的)後,重載了equal的辦法,使得其成了比擬字符串中的內容。

很好的懂得了equals以後,如今讓我們來研討一下“==”辦法的虛無缥缈。
“==”是Java中的運算符,它比擬的內容是兩個對象的指針,也就是現實對象的地址。是以很輕易懂得e==a是前往true的。
我們再來看下c和d之間的比擬,看到new症結詞,解釋c和d都是從新請求了一塊內存地址,然後外面賦值為“test”,所以c==d前往的是false。同理都可以懂得
a,c,d,f之間的“==”操作都前往的是false。

然後再來看看g= a + “”,固然沒有看到new症結詞,然則因為String類“+”操作符被重載以後,重載的辦法當中必定會從新new一個String,所以也就釀成了下面的情形。那末最難懂得的就是a和b的比擬了,其實這是Java編譯器的優化所帶來的成果,java編譯器有一個叫字符串常量池的存儲區域,因為String a = "test"這條語句編譯以後,“test”就會存儲在這個字符串常量池中,那末再界說b的時刻,b依然指向這塊區域,所以說a和b指向的依然是統一塊區域。所以a==b前往的true。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved