Java对象引用用==比较返回false?move(0,0)返回值比较异常排查
问题根因
Java中==运算符对引用类型做比较时,校验的是两个对象是否指向同一块内存地址,而非对象的属性值是否相等。你的代码在入参均为0的分支中,仍然通过new Point(x, y)创建了全新的Point对象,该对象和调用move方法的原Point对象(即测试代码中的p)是完全独立的两个实例,内存地址完全不同,因此p == moved的断言结果为false。
另外你现有代码还存在语法问题:p2 = p行末尾缺少分号,会在编译阶段直接报错,不过这不是断言失败的核心诱因。
修复方案
只需要在入参均为0时,直接返回当前对象本身(this关键字指向当前调用move方法的实例)即可满足需求,修复后的代码如下:
public Point move(int xSteps, int ySteps) { if (xSteps == 0 && ySteps == 0) { return this; } return new Point(x + xSteps, y + ySteps); }
修复后调用move(0,0)返回的就是原对象本身,p == moved的断言就会返回true。
内容的提问来源于stack exchange,提问作者Zaid Fanek
相关产品推荐
相关产品推荐

