为什么这个java代码给出不同的答案?

时间:2013-04-12 19:32:18

标签: java string

为什么以下java代码给出了答案:

不等于
相等。

代码:

    String a=new String("abc");
    String b=new String("abc");
    String c="abc";
    String d="abc";


    if(a==b){
        System.out.println("equal");
    }else{
        System.out.println("not equal");
    }

    if(c==d){
        System.out.println("equal");
    }else{
        System.out.println("not equal");
    }

我很困惑这两个陈述的方式是什么

        String a=new String("abc");
        String c="abc";

有何不同?
简单来说,两个作业之间的区别是什么? 任何帮助将不胜感激 感谢

3 个答案:

答案 0 :(得分:3)

当您使用字符串文字直接初始化字符串变量时,Java将intern the Java literal string,以便两个字符串变量引用相同的实际字符串对象。

使用new运算符时,即使新字符串的内容与字符串文字相同,也会获得不同的对象。

正如已经多次指出的那样,==运算符会比较对象引用以查看它们是否指向同一个对象,并且不会比较字符串内容。

答案 1 :(得分:2)

不要使用==来比较字符串;使用equals()方法。

if(a.equals(b)) {
    System.out.println("equal");
}else{
    System.out.println("not equal");
}

答案 2 :(得分:1)

分配字符串文字将使用字符串池(因此是相等的引用),new字符串将始终创建一个新实例,从而产生不同的对象。