这是API里面的解释。 public int hashCode()Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables. As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.) 内部地址可以被用作 一个唯一的整形来 作为哈希玛,但没有要求这么做。而且也不是这么做的。 至于为什么要 有这个方法,就是为了支持 查找高效。
public class Address { public static void main(String[] args) { String a = new String("hhh"); Object b = new String("hhh"); System.out.println(System.identityHashCode(a)); System.out.println(System.identityHashCode(b)); } }
第一个问题有没有人帮我回答一下呀???
hashCode 只是根据内容 ,计算出的哈希值,哪里是什么内存地址。
附代码
public class Address
{
public static void main(String[] args)
{
String a = "hhhhongjun";
String b = "hhhhongjun";
System.out.println(a.hashCode());
System.out.println(b.hashCode());
}
}
hashCode 只是根据内容 ,计算出的哈希值,哪里是什么内存地址。
附代码
public class Address
{
public static void main(String[] args)
{
String a = "hhhhongjun";
String b = "hhhhongjun";
System.out.println(a.hashCode());
System.out.println(b.hashCode());
}
}
hashCode()是在存放hashMap等时用的生成hash的值,
一般没什么用处,只有在你这样用时,才须考虑hashCode()
如:
有一个自己的类Class A
HashMap map = new HashMap();
A temp = new A("a");
map=pub(temp, "1");
你要根据A("a")在map中查"1"时,就必须改写hashCode
主A("a")的hashCode相等,且此时temp.equals(new A("a));
看看Object中toString的定义就明白了:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
public int hashCode()Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable.
The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.) 内部地址可以被用作 一个唯一的整形来 作为哈希玛,但没有要求这么做。而且也不是这么做的。
至于为什么要 有这个方法,就是为了支持 查找高效。
但是可以认为他是Java对象的内存地址,任何时候都可以获得这个值Object o=new XXX();
System.out.println(System.idendityHashCode(o));
public class Address
{
public static void main(String[] args)
{
Object a = new String("hhh");
Object b = new String("hhh");
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(b)); }
}
该问题 各位已经都回答得差不多了。
{
public static void main(String[] args)
{
String a = new String("hhh");
Object b = new String("hhh");
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(b)); }
}