【问题标题】:What is difference in memory address and Java HashCode [duplicate]内存地址和Java HashCode有什么区别[重复]
【发布时间】:2020-03-12 18:54:11
【问题描述】:
即使您有两个具有相同值的不同字符串,它们也将具有相同的哈希码。 在下面的示例中 HashCode 是否相同?但是内存地址是一样的吗?我怎样才能在java中得到它。

jshell> var a = new String("Ranga")

a ==> “兰加”

jshell> var b = new String("Ranga")

b ==> “兰加”

jshell> a.hashCode()

31 美元 ==> 78727449

jshell> b.hashCode()

32 美元 ==> 78727449

jshell> a == b

$33 ==> 错误

【问题讨论】:

  • 为什么?您要解决的问题或您要尝试做的事情是什么?考虑 Java 中的内存地址意味着你已经走错了路……
  • 你不能访问 java 中的内存位置。就算可以,又有什么用呢?你不能使用它。
  • 你应该问自己的问题是,“Java 有像 C/C++ 这样的指针吗?”然后你就可以自己回答这个问题了。
  • hashCode() != 内存位置。在当前的hotspot实现中,identityHashCode不依赖于内存位置。
  • 如果您可以添加一些有用的参考链接@JohannesKuhn

标签: java string memory-address


【解决方案1】:

如果您想查看字符串更改前的原始 hashCode,您可以这样做:

String foo = ...some string
System.out.println(System.identityHashCode(foo));

根据hashCode的文档

在合理可行的情况下,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但 Java™ 编程语言不需要这种实现技术。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 2021-10-14
    • 1970-01-01
    • 2021-09-11
    • 2013-01-22
    • 1970-01-01
    • 2020-11-09
    • 2019-02-27
    相关资源
    最近更新 更多