轻点 别打脸 2019-09-01 19:04 采纳率: 33.3%
浏览 341
已采纳

java对象储存问题,hashcode,equals方法,hashcode码是代表储存位置,还是检索键指向标志

在看到hashcode,equal时有个疑问:

        String a = "小乔";
        String te = new String("小乔");
        System.out.println(te.equals(a));
        System.out.println("te:hashcode>>>>"+te.hashCode());
        System.out.println("a:hashcode>>>>>"+a.hashCode());


        ChangeStringBuilder csb = new ChangeStringBuilder(new StringBuilder("小乔"));
        ChangeStringBuilder csb1 = new ChangeStringBuilder(new StringBuilder("小乔"));
        System.out.println(csb.hashCode());
        System.out.println(csb1.hashCode());
        System.out.println(csb.equals(csb1));

String在定义相同值的时候,equal返回true,hashcode值也相同,
StringBuilder定义相同值,equal返回false,hashcode值不同。

问:
java在对象创建的时候,是相同值储存一个地址,不同指针指向,还是创建两个对象,在不同的储存位置?


如果是一个地址,为什么StringBuilder的hashcode码不一样?


hashcode值是代表储存位置,还是检索键?

  • 写回答

1条回答 默认 最新

  • Lei_Da_Gou 2019-09-01 19:41
    关注

    答1:如果创建对象如StringBuilder,则为两个指针,在不同的位置储存
    答2:因为不是一个地址,如果创建String,则为一个地址,hashcode也一样,因为String创建后为常量,在常量池中保存
    答3: hashcode % 容量才能表示存储位置,如果该对象不用于比较,不用于存放在HashMap、HashSet等容器中,hashcode没有任何意义
    有疑问清追问,解决了你的疑问清采纳,谢谢!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog