2014-12-31 34 views
0
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)); 
    } 
} 

以上代码的输出返回对象的哈希码的同一类名@十六版,虽然我对SG伽内什图沙·夏尔马指(OCPJP指南文本)状态“十六进制值对于每个实例都是不同的。”我没有正确理解这个吗?的Java:的ToString()打印相同的hashCode每次

+1

你一次又一次地运行此同一程序?或者你的意思是你正在创建'Point'的另一个实例,但获得相同的值? –

+0

@ shree.pat18:我正在运行相同的程序。 – sk89

回答

2

尝试使两个实例,

System.out.println(new Point(10, 20)); 
System.out.println(new Point(10, 20)); 

,你会得到两个不同的哈希码。

+0

是的,确实发生过。但是我想了解的是,应该运行原始程序,每次给我相同的输出? – sk89

+0

@ sk89当然可能。特别是如果它。 –

3

对于hashCode#JavaDoc

只要它是一个 执行的Java应用程序在同一对象上多次调用,hashCode方法必须始终 返回相同的整数...

在这里,你是在谈论[email protected],将程序的执行过程中保持不变,但如果你一次又一次地运行程序,你可以每次都相同或得到这个代表不同几次,因为它取决于哈希码和内存分配。

+0

如果它的相同用于多次执行程序? – Prashant

0

呀!......做两个像上面并尝试...

public static void main(String[] args) {System.out.println(new Point(10,20));} 

上面的代码创建一个只..

+1

你为什么写在答案???你可以发表评论 – Prashant

+0

只是为了解释。 –

0

如果你运行同一程序多次所以不确定性,它将返回相同对象的相同HashCode或不同HashCode。这取决于您的Hashcode()实现。

该整数不必保持从应用到同一应用程序的另一个执行的一个执行一致的。

+0

我正在使用默认的toString实现。我只是想知道如果输出将保持相同的程序多次执行相同。 – sk89

+0

是的,这可能是相同的几个执行没有把握,当它会给新的hashCode。更好的是你可以重写hashCode()并编写一些表达式来帮助你检查输出。 – Prashant

2

你无法预知的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()方法取决于你自己的要求,我不知道...
所以最后我想说的是这是一个最好的做法来实现的hashCode(),toString()方法,等于()方法在我们每一个自定义类。

相关问题