Java 相等返回错误。什么';这个密码怎么了?

Java 相等返回错误。什么';这个密码怎么了?,java,Java,我有java语法。对不起,我还不明白为什么会这样 public class TestString { public static void main(String [] args){ int i=-1; String a=((Object)i).toString(); if(a=="-1"){ System.out.println("Same"); }else{ System.out.println("Not"); }

我有java语法。对不起,我还不明白为什么会这样

public class TestString {
  public static void main(String [] args){
    int i=-1;
    String a=((Object)i).toString();
    if(a=="-1"){
        System.out.println("Same");
    }else{
        System.out.println("Not");
    }
  }
}

然后结果是“不是”什么问题为什么-1字符串与对象中的-1 int不同?

您必须对字符串使用
.equals()
进行比较

试一试


字符串必须与.equals()方法进行比较。

您使用的是引用相等,而不是对象相等

由于文本表中的
“-1”
与新分配的
a
具有不同的堆地址,因此它返回
false

如果由于某种原因,您发现自己分配了许多代码>字符串S/<代码>对象,这些对象共享相同的值,并希望通过引用来测试它们,请考虑使用<代码> StrySyIn()/<代码>:

==

比较在您的案例中不相同的引用,所以如果要比较字符串值,请使用

.equals()方法


==运算符检查两个对象是否完全相同。您可以使用equals方法检查值是否相等

尝试打印a并查看差异;)使用.equals()比较StringThory I来自C#behavior。。感谢使用
==
(reference equals)运算符时,甚至不会访问这些对象。唯一要测试的是它们的堆地址。
public class TestString {
  public static void main(String [] args){
    int i=-1;
    String a=((Object)i).toString();
    if(a.equals("-1")){
        System.out.println("Same");
    }else{
        System.out.println("Not");
    }
  }
}
final String a = [...].intern(); // allocated
if (a == SOME_INTERNED_STRING_1) {
  [...]
else if (a == SOME_INTERNED_STRING_2) {
  [...]
}