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