这个问题,首先要从Java.lang.Object类中hashCode()的定义开始说起,
这个传说中的上帝(Object类)的hashCode函数定义如下:
public native int hashCode();
加入native 这个关键字,表示这个方法是有实现体的,但是实现体是非java代码的,也就是这个函数的实现是交给操作系统来实现的,java只负责调用
那么也就是说这个hashCode返回的值,是系统经过一定的算法返回的
我刚刚写了一个程序测试了下,
假如主函数里的数组名为 A,再建立了个两个数组,这个两个数组分别为B 和 C,输出A,B,C,那么输出的哈希值分别 A1,B1,C1。
但是如果只输出 B C 那么结果就为 A1 B1
如果只说输出 A C 那么结果也为 A1 B1
然后我就写了个程序把前10个对象生成的hashCode值分别写入到两个文件中,发现这两个文件的对应的值都是相同的
import java.io.*;
class Demo
{
public static void main(String[] args) throws IOException
{
BufferedWriter bufr = new BufferedWriter(new FileWriter("one.txt"));
//这个语句占用了第一个hashCode的地址值,应该其内部运行了hashCode的方法了,然后把该哈希值占用了
for(int i=0; i < 10; i++)
{
Object obj = new Object();
bufr.write(obj.toString());
bufr.newLine();
bufr.flush();
}
bufr.close()
}
综上所述,我认为你说的这个值不是一定的,但是对于新建立的对象,如果调用到hashCode函数的(显示或者隐式),
系统给这个对象所分配的哈希值则是有一定的顺序关系的
像您写的那个类,如果主函数改成
public static void main(String[] args)
{
Object obj = new Object();
System.out.println(obj);
System.out.println(args);
}
然后就可以看出这个args的哈希值就不是之前的那个了,但同样你可以多次运行不同的程序来输出多个对象,
输出多个不同对象的值的时候,他们的哈希值会是相对应的,这个是我经过测试,发现的规律的,
如各位发现其有问题,希望各位能指出
|