掌握基本的D.S ....我读过,原始类型hashCode()
没有int
方法可用,如果在int
上调用,则会抛出错误
错误:int无法解除引用
这是否意味着如果int n = 10
那么它的HashCode
也将是10 ??
如果我仍然需要在下面的程序中查看int
的hascode,是否有方法可以查看它,例如Integer
Wrapper
???
public static void main(String []args){
String me = "hello";
int n = 10;
int h1 = me.hashCode();
int h2 = n.hashCode();
System.out.println(h1);
System.out.println(h2);
}
答案 0 :(得分:8)
您无法调用基本类型的方法。
n
被声明为int
。它没有方法。
像
一样思考是没有意义的如果我仍然需要在下面的程序中看到int的hascode
您可以创建Integer
对象并获取其hashCode()
Integer.valueOf(n).hashCode()
Integer#hashCode()
实现为
public int hashCode() {
return value;
}
其中value
是它包装的int
值。
这是否意味着如果int n = 10,那么它的HashCode也将是10 ??
int
没有哈希码。然而,它的Integer
包装器将具有int
包装的值。
答案 1 :(得分:2)
只有对象有方法。不是原始人。你可能想要
int h2 = new Integer(n).hashCode();
只需创建int
的包装并在其上调用方法。
答案 2 :(得分:1)
简单回答是int
不是Java
对象,hashCode()
没有这样的事情int
。
答案 3 :(得分:0)
int
不是Object
。它没有方法。
如果您想了解Integer
类的工作原理,可以使用Grep Oracle的Java代码:
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/lang/Integer.java#Integer.hashCode%28%29
特别是,这确认了hashCode()
对象Integer
的返回确实是它的基础整数值。
答案 4 :(得分:0)
int
不是Java中的对象。它是一种原始数据类型。但是,您可以使用Integer
类来获取int的哈希码。
System.out.println(new Integer(n).hashCode());
希望这有帮助。
答案 5 :(得分:0)
Java 8带来了静态方法,可以更方便地为原始值生成哈希码。这些方法存储在原始等价类中。
在this discussion中提到了一个OpenJDK开发人员bondolo(Mike Duigou?),他们讨论了Google Guava如何影响Java中的核心库。
在Java 8中,小番石榴启发的JDK添加的示例包括添加到基元类型的静态hashCode方法。
......等等。
答案 6 :(得分:0)
原语具有哈希码是没有意义的。它们本身就是您可以要求的最佳哈希码。
实现整数哈希码以冗余地返回值本身,因此当在java.util.HashSet中使用时,它会映射到自身。
public int hashCode() {
return value;
}