page contents

String变量的内存地址是不是没法打印出的?

Pack 发布于 2020-02-08 18:10
阅读 597
收藏 0

我用hashCode 但是结果 应该是不对的


 String str1 = new String("xyz");

    String str2="xyz";

    System.out.println(str1.hashCode());

    System.out.println(str2.hashCode());

    System.out.println(str1 ==str2);

str1 和str2的hashcode值是一样的 但是str1 ==str2 返回是false,所以hashcode应该不能作为 变量的地址,所以String变量的内存地址是不是没法打印出的?

287
Pack
Pack

字符串对象的哈希码根据以下公式计算:


s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。空字符串的哈希值为 0。


Object的hashcode方法是返回的内存地址,你可以强转Object试试


或者使用unsafe方法,参考https://blog.csdn.net/mxd446814583/article/details/79599752

请先 登录 后评论