有没有办法看到原始类型的HashCode?

时间:2014-02-13 08:03:04

标签: java hashcode

掌握基本的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);
     }

7 个答案:

答案 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)

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;
}