在Java中使用==,>,<等等比较两个相同类型的对象会发生什么?

tru*_*ktr 4 java conditional

可能重复:
等于和==之间的差异

例如,如果我有

MyClass foo = new MyClass();
MyClass bar = new MyClass();

if (foo == bar) {
    // do something
}
if (foo < bar) {
    // do something
}
if (foo > bar) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

怎么做foobar比较?Java是否在寻找.compareTo()要实现的方法MyClass?Java是否在内存中比较对象的实际二进制结构位?

pb2*_*b2q 8

非常简单的算术比较运算符==!=比较对象引用或对象的内存地址.>,和<相关的运算符不能与对象一起使用.

因此==,!=仅当您想确定两个不同的变量是否指向同一个对象时才有用.

作为一个例子,这在事件处理程序中很有用:如果你有一个事件处理程序绑定到例如多个按钮,你需要在处理程序确定按下了哪个按钮.在这种情况下,您可以使用==.

您询问的类型的对象比较是使用类似方法.equals或特殊用途方法捕获的String.compareTo.

值得注意的是,默认Object.equals方法等同于==:它比较对象引用; 这在文档中有所涉及.Java中构建的大多数类都equals使用自己的实现覆盖:例如,String覆盖一次equals比较一个字符.要.equals为您自己的对象获得更具体/更有用的实现,您需要覆盖.equals更具体的实现.