final class ComplexNumber {
private final double re;
private final double im;
public ComplexNumber(double re, double im) {
this.re = re;
this.im = im;
}
public double getRe() {
return re;
}
@Override
public boolean equals
(Object o
) { if (this == o) return true; //(this == o) - ругается
if (o == null || getClass() != o.getClass()) return false; //ругается getClass() != o.getClass()
ComplexNumber that = (ComplexNumber) o; //(ComplexNumber) o - ругается
if (Double.
compare(that.
re, re
) != 0) return false; if (Double.
compare(that.
im, im
) != 0) return false;
return true;
}
@Override
public int hashCode() {
int result;
long temp;
temp
= Double.
doubleToLongBits(re
); result = (int) (temp ^ (temp >>> 32));
temp
= Double.
doubleToLongBits(im
); result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
public double getIm() {
return im;
}
public static void main
(String[] args
) {
ComplexNumber a = new ComplexNumber(1, 1);
ComplexNumber b = new ComplexNumber(1, 1);
System.
out.
println(a.
equals(b
)); System.
out.
println(a.
hashCode() + " " + a.
hashCode()); }
}
ZmluYWwgY2xhc3MgQ29tcGxleE51bWJlciB7Cglwcml2YXRlIGZpbmFsIGRvdWJsZSByZTsKCXByaXZhdGUgZmluYWwgZG91YmxlIGltOwoJCglwdWJsaWMgQ29tcGxleE51bWJlcihkb3VibGUgcmUsIGRvdWJsZSBpbSkgewoJICAgIHRoaXMucmUgPSByZTsKCSAgICB0aGlzLmltID0gaW07Cgl9CgkKCXB1YmxpYyBkb3VibGUgZ2V0UmUoKSB7CgkgICAgcmV0dXJuIHJlOwoJfQoJCglAT3ZlcnJpZGUKCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewoJICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOyAvLyh0aGlzID09IG8pIC0g0YDRg9Cz0LDQtdGC0YHRjwoJICAgIGlmIChvID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvLmdldENsYXNzKCkpIHJldHVybiBmYWxzZTsgLy/RgNGD0LPQsNC10YLRgdGPIGdldENsYXNzKCkgIT0gby5nZXRDbGFzcygpCgkKCQoJICAgIENvbXBsZXhOdW1iZXIgdGhhdCA9IChDb21wbGV4TnVtYmVyKSBvOyAvLyhDb21wbGV4TnVtYmVyKSBvIC0g0YDRg9Cz0LDQtdGC0YHRjwoJCgkgICAgaWYgKERvdWJsZS5jb21wYXJlKHRoYXQucmUsIHJlKSAhPSAwKSByZXR1cm4gZmFsc2U7CgkgICAgaWYgKERvdWJsZS5jb21wYXJlKHRoYXQuaW0sIGltKSAhPSAwKSByZXR1cm4gZmFsc2U7CgkKCSAgICByZXR1cm4gdHJ1ZTsKCX0KCQoJQE92ZXJyaWRlCglwdWJsaWMgaW50IGhhc2hDb2RlKCkgewoJICAgIGludCByZXN1bHQ7CgkgICAgbG9uZyB0ZW1wOwoJICAgIHRlbXAgPSBEb3VibGUuZG91YmxlVG9Mb25nQml0cyhyZSk7CgkgICAgcmVzdWx0ID0gKGludCkgKHRlbXAgXiAodGVtcCA+Pj4gMzIpKTsKCSAgICB0ZW1wID0gRG91YmxlLmRvdWJsZVRvTG9uZ0JpdHMoaW0pOwoJICAgIHJlc3VsdCA9IDMxICogcmVzdWx0ICsgKGludCkgKHRlbXAgXiAodGVtcCA+Pj4gMzIpKTsKCSAgICByZXR1cm4gcmVzdWx0OwoJfQoJCglwdWJsaWMgZG91YmxlIGdldEltKCkgewoJICAgIHJldHVybiBpbTsKCQoJCgkKCX0KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQoJICAgIENvbXBsZXhOdW1iZXIgYSA9IG5ldyBDb21wbGV4TnVtYmVyKDEsIDEpOwoJICAgIENvbXBsZXhOdW1iZXIgYiA9IG5ldyBDb21wbGV4TnVtYmVyKDEsIDEpOwoJICAgIFN5c3RlbS5vdXQucHJpbnRsbihhLmVxdWFscyhiKSk7CgkgICAgU3lzdGVtLm91dC5wcmludGxuKGEuaGFzaENvZGUoKSArICIgIiArIGEuaGFzaENvZGUoKSk7Cgl9Cn0=