-3

为什么下面的 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";

有什么不同?
简而言之,这两个作业有什么区别?
任何帮助将不胜感激。
谢谢

4

3 回答 3

3

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

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

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

于 2013-04-12T19:34:53.887 回答
2

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

if(a.equals(b)) {
    System.out.println("equal");
}else{
    System.out.println("not equal");
}
于 2013-04-12T19:33:12.420 回答
1

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

于 2013-04-12T19:34:27.813 回答