-3

我的代码如下

public class EqualsComMetod_Operator {

  public static void main(String[] args) {

    String s1=new String("Raja");
    String s2=new String("Raja");
    System.out.println("s1==s2::"+s1==s2);
    // Here the text s1==s2:: not printed on my console why??
  }
}

输出:

错误的

我将对象作为参考/地址进行比较,并尝试像这样打印:

s1==s2::假

但直接显示假。为什么?

4

3 回答 3

1

声明应该是

System.out.println("s1==s2::" + (s1 == s2));
于 2014-09-07T06:13:11.013 回答
1

运算符+==.

因此,如果您检查表达式"s1==s2::"+s1==s2

首先"s1==s2::"+s1是评估。结果是"s1==s2::Raja". 然后,"s1==s2::Raja"==s2被评估,并且显然导致false

您可以使用方括号控制优先级:

public static void main(String[] args) {
    String s1 = new String("Raja");
    String s2 = new String("Raja");
    System.out.println("s1==s2::" + (s1 == s2));
}
于 2014-09-07T06:16:00.570 回答
-3

当您使用 创建两个字符串时new,它们是不同的对象。即使字符串包含相同的内容,相等运算符也将始终返回 false。这与文字字符串不同,编译器将对其进行优化以引用同一对象。

String s1 = new String("Raja");
String s2 = new String("Raja");
System.out.println(s1 == s2); // false

String s3 = "Raja";
String s4 = "Raja";
System.out.println(s3 == s4); // true
于 2014-09-07T06:31:47.970 回答