Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 等于返回false_Java - Fatal编程技术网

Java 等于返回false

Java 等于返回false,java,Java,可能重复: 我的一位同事今天问了我一个问题,如下所述 编写TestEquals类(自定义或用户定义类),以便代码中的以下s.o.p打印false public class Puzzle3 { public static void main(String[] args) { TestEquals testEquals = new TestEquals(); System.out.println(testEquals.equals(testEquals)); } } 注意

可能重复:

我的一位同事今天问了我一个问题,如下所述

编写TestEquals类(自定义或用户定义类),以便代码中的以下s.o.p打印
false

public class Puzzle3 {
  public static void main(String[] args) {
    TestEquals testEquals = new TestEquals();
    System.out.println(testEquals.equals(testEquals));
  }
}
注意:您不能重写equals方法。

我想了很多,但是没有覆盖equals就找不到解决方案。有人知道怎么做吗?

使用

public boolean equals(TestEquals equals) {
    return false
}

要覆盖equals,您需要输入参数的类型为object,因此上述代码段理论上不是覆盖object方法中的equals,我不知道为什么会有人想这样做。但您可以创建如下所示的方法:

public boolean equals(SuperEquals equals) { return false; }

如果
SuperEquals
TestEquals
的任何超类,但不是上面提到的
Object

,您可以编写如下方法:

public boolean equals(TestEquals e) {
    return false;
}
此外,如果
TestEquals
可以扩展其他对象:

public TestEquals extends Something {
}

public Something {
    @Override public boolean equals(Object o) {
        return false;
    }
}
编辑:显然是在另一个线程中首先想到这个想法的,但我将把它留在这里,因为这段代码要简单得多



这种可怕的黑客攻击不会覆盖或重载与
equals
有关的任何内容,但是创建
TestEquals
实例的行为会导致加载包装
系统的类。out
,因此以
't'
开头的任何后续打印都会导致
错误
打印,而不是前4个字节。(假设默认编码不是超奇异的。)

在我的iPad上……策略应该类似于让aun属性在每次使用它时都会被修改。如果该属性是通过getter On equals访问的,这将起作用。您提到equals不能被重写,因此属性应该是私有的,并且在读取值之前和之后对值进行修改,以确保无论它是equals的第一部分还是第二部分都有效

类似于(抱歉出现语法错误):


这不是家庭作业?允许超载吗?重复的得到了两张反对票,接受的答案只有四张赞成票。“是什么让这个问题这次变得更好了?”马巴我也这么想。最初的问题(不是这一个)措辞相当严厉,没有介绍。我想人们对那种事情很敏感。一旦这个问题被否决,访问它的人就会减少,因此答案的得票率也会下降。@maba这很奇怪。看起来他们俩在同一个班。也许人们在接近周末的时候感觉更亲切了……如果你愿意,它还可以返回一个
字符串
。@DuncanJones好的一点是我没有想到+1会指出+1是为了跳出框框思考。第一个签入Object.equals(Object obj)是
如果(this==obj)返回true
class TestEquals {

  static {
    System.setOut(new PrintStream(new FilterOutputStream(System.out) {
      public void write(byte[] buf, int pos, int len) throws IOException {
        if (len >= 4 && buf[pos] == 't') {
          out.write(new byte[] {
              (byte) 'f', (byte) 'a', (byte) 'l', (byte) 's', (byte) 'e'
            });
          out.write(buf, pos + 4, len - 4);
        } else {
          out.write(buf, pos, len);
        }
      }
    }));
  }
}
public class TestEquals{

 private int id;

 public int getId(){
    int temp;
    id++;
    temp=id;
    id++;
    return temp;
 }
}