class Point {
private int xPos, yPos;
public Point(int x, int y) {
xPos = x;
yPos = y;
}
public static void main(String[] args) {
System.out.println(new Point(10,20));
}
}
上面代码的输出返回对象哈希码的相同ClassName @hex版本,尽管我所指的文本(S G Ganesh和Tushar Sharma的OCPJP指南)声明“每个实例的十六进制值都不同”。我不能正确理解这个吗?
答案 0 :(得分:3)
对于hashCode
#JavaDoc
说
每当在同一个对象上多次调用它时 执行Java应用程序时,hashCode方法必须始终如一 返回相同的整数......
这里你谈的是ClassName@hex
在执行程序时会保持不变但是如果你一次又一次地运行程序,你可能会每次或相同的几次使这种表示不同,因为它依赖于hashcode和受内存分配的限制。
答案 1 :(得分:2)
尝试制作两个实例,
System.out.println(new Point(10, 20));
System.out.println(new Point(10, 20));
你会得到两个不同的hashCodes。
答案 2 :(得分:2)
您无法预测将在您的参考上调用的hashCode,但您可以发现始终hashcode将是唯一的。默认情况下,toString()打印您的类继承自Object类的hashCode()。 首先,您应该知道何时使用哈希码。如果您编写以下代码,您将看到继承的Object的hashCode()实现的两个不同的哈希码。
public class Point {
private int xPos, yPos;
public Point(int x, int y) {
xPos = x;
yPos = y;
}
public static void main(String[] args) {
System.out.println(new Point(10,20));
System.out.println(new Point(10,20));
}
}
但如果你想将你的对象插入HashSet,HashMap集合中,它就无法工作。为此,您必须覆盖Point类中的hashCode()。我无法编写代码,但是重写hashCode()取决于你自己的要求,我不知道......最后我想说的是它是最好的做法在我们的每个自定义classe中实现hashCode(),toString(),equals()方法。
答案 3 :(得分:0)
是啊!...像上面那样做两个并试试......
public static void main(String[] args) {System.out.println(new Point(10,20));}
上面的代码只创建了一个..
答案 4 :(得分:0)
如果您将多次运行相同的程序,那么不确定它将为同一个Object返回相同的HashCode或不同的HashCode。这取决于你的Hashcode()实现。
从应用程序的一次执行到同一应用程序的另一次执行,此整数不需要保持一致。