java中判斷兩個字符串是否相等


  一般編程語言中喜歡用==符號來判斷java中兩個字符串是否相等,例如c++。c++提供了操作符的重載,所以可以重載==運算符來判斷。

  但是由於java中,沒有提供運算符重載,而且java中沒有提供基本的string類型、也沒有把string看成char數組,所以比較的時候不能用==。java中,比較兩個字符串是否相等用equals()和equalsIgnoreCase()方法。

  java中==比較的是兩個變量是否存放在同一個內存地址中,如果兩個對象存放在同一個地址,用==判斷來比較返回true,否則返回false。

  在java中字符串常量存放在數據段中,是共享的,也就是如果你寫String a="ab";String b="ab";那么內存中只有一個ab,變量a、b指向同一個內存塊。此時a和b是相等的,用a==b來判斷返回true。

  但是如果對字符串進行了某些操作,比如+或者substring(),產生的字符串不是共享的,而是存放在另外一個內存塊中。

  比如:

  String a = "hello";

  String b= a.substring(0,2);

  則b=="hel"可能是false。

 

示例:

/**
 *This program is to test how java saves String valuable.
 *@author hewenwu 
 */

public class StringTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
String a="abcd";
String b="ab";
String d="cd";
String c=a.substring(0,1);
String e=b+d;
String f="abcd";

//test1
if(c=="ab")
{System.out.println("c==ab");}
else System.out.println("c!=ab");

//test2
if(c==b){System.out.println("c==b");}
else System.out.println("c!=b");

//test3
if(a==e){System.out.println("a==e");}
else System.out.println("a!=e");

//test4
if(a==f){System.out.println("a==f");}
else System.out.println("a!=f");


    }

    
    
}

輸出結果:
c!=ab
c!=b
a!=e
a==f

 

從test1、test2、test3可以看出,操作+和substring()產生的字符串是不共享的

從test4可以看出,java中字符串常量是共享的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM