唯一有趣的是,为什么hashCode()在java.lang.String中不是静态的? 而且在空返回的情况下,例如-1? 由于经常需要做somethihg,如:Java String hashCode为空字符串
String s;
.............
if (s==null) {
return 0;}
else {
return s.hashCode();
}
感谢。
唯一有趣的是,为什么hashCode()在java.lang.String中不是静态的? 而且在空返回的情况下,例如-1? 由于经常需要做somethihg,如:Java String hashCode为空字符串
String s;
.............
if (s==null) {
return 0;}
else {
return s.hashCode();
}
感谢。
正如其他人已经注意到的hashCode
是Object
上的方法,并且是非静态的,因为它固有地依赖(即属于)对象/实例。
注意,Java 7中引入了Objects
类,它有hashCode(Object)
方法,它正是你想要的:返回o.hashCode()
如果o
非空或0
其他。
该课程还有其他方法处理可能的值,例如equals(Object, Object)
,toString(Object)
等。
它返回的hashCode不是一个类Object
。
因为如果它是静态的"1".hashCode()
和"2".hashCode()
会返回相同的值,这显然是错误的。
它是特定的每个实例,并受其影响,因此它不能是静态的。
错误:如果沿着非静态[String.hashCode()]提供静态'hashCode(String)'(http://docs.oracle.com/javase/7/docs/api/java/lang /String.html#hashCode%28%29),可以像这样调用'String.hashCode(“1”)',或者如果忽略警告''2“.hashCode(”1“)'。这两个调用都会返回相同的值。 –
@bernardpaulus但问题不是关于'hashCode(String)',而是关于'hashCode()'(未参数化)。 – amit
一个没有参数的静态'String.hashCode()'没有多大意义(甚至不应该编译,因为它不能重载[Object.hashCode()](http://docs.oracle.com/javase/7/docs /api/java/lang/Object.html#hashCode%28%29))。另外,'foo()'表示法通常用于指示'foo'是一个函数,而不指定参数。 –
因为String的哈希码是该String的属性。
使用相同的思路,您可以使每种方法都是静态的。
hashCode
用于获取对象的hashCode,以便知道该对象必须放置在哪个桶中。因此它必须是对象的一个实例方法,并且必须以多态方式调用它。
null
可用作HashMap中的键,但它被视为一种特殊情况。
你似乎在使用hashCode来达到不同的目的,所以你必须以特定的方式来处理。
如果是静态的,它不会是一个非常有用的散列。 (并且注意hashCode是Object的一个方法。) –
(当然,你可以编写你自己的静态myHash方法来检查它的参数为null。) –
'static int hashCodeOf(Object o){return(o!= null )? o.hashCode():0; }' – oliholz