从String到==和hashcode

2016024249- 2020-03-10 原文

从String到==和hashcode

 1 public static void main(String[] args) {
 2         String s1 = "ni";
 3         String s2 = "hao";
 4         String s3 = "nihao";
 5         String s4 = "ni" + "hao";
 6         String s5 = s1 + s2;
 7         System.out.println(s3 == s4);
 8         System.out.println(s3 == s5);
 9         System.out.println(s3.equals(s5));
10         System.out.println(s3.hashCode() == s5.hashCode());
11 }

执行结果

true
false
true
true

第一个输出结果大伙应该都知道,String在常量池里找到”nihao”就直接返回地址引用

第二个是因为等号后面有变量(假设是String s5 = s1 + “hao”结果也是一样),他都必须new一个新的String对象出来,就不回去常量池里找了

第三个大伙应该也知道String的equals方法被重写了,比较的是值一不一样而不是地址值

第四个就是典型地验证了 == 不相等的哈希值可能相等,估摸着就是算着俩对象一样哈希值一样拉链法给s5扔s3那颗红黑树里了(更可能是链表,就这么小的世界不会那么巧8 ^ ^_ )

 

根据第四个延申会不会两个对象长一样哈希值就一样呢,立刻实验

 1 public class WhatEver implements Cloneable{
 2             public static void main(String[] args) {
 3                 WhatEver o1 = new WhatEver();
 4                 WhatEver o2 = null;
 5                 try {
 6                     o2 = (WhatEver) o1.clone();
 7                 } catch (CloneNotSupportedException e) {
 8                     e.printStackTrace();
 9                 }
10                 System.out.println(o1.hashCode() == o2.hashCode());
11     }
12 }

执行结果

false

clone出来基本保证俩对象一样,结果却是false,俺也不知道咋回事了,懂的评论一下,去研究hashcode了

发表于
2020-03-10 13:25 
̴̴̴ 
阅读(
评论(
编辑 
收藏

 

版权声明:本文为2016024249-原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/2016024249-/p/12455155.html

从String到==和hashcode的更多相关文章

随机推荐

  1. 前端使用的MAC系统必备装机软件列表

    homebrew  官网的用不了直接用国内源的。https://gitee.com/cunkai/Homebr […]...

  2. 非常的奇葩,终于解决了硬盘从盘盘符消失的问题 http://bbs.gamersky.com/thread-1712710-1-1.html (出处: 游民星空论坛)

    本人用电脑也十多年了,硬盘的问题也碰到过不少。但最近却碰到了一个很奇葩的问题。就是安装了一块全新的SSD硬盘当 […]...

  3. LOGO设计的构思手法 – 時空逸夢

    LOGO设计的构思手法 LOGO设计表象手法:采用与LOGO设计对象直接关联而具典型特征的形象,直述LOGO的 […]...

  4. C# Winfrom 自定义控件——带图片的TextBox

    使用PictureBox和TextBox组合控件的形式完成一个自定义的带图片的文本输入框。 效果: 描述: 本 […]...

  5. Opencv中视频播放与进度控制

    视频画面本质上是由一帧一帧的连续图像组成的,播放视频其实就是在播放窗口把一系列连续图像按一定的时间间隔一幅幅贴 […]...

  6. [ES6深度解析]14:子类 Subclassing

    我们描述了ES6中添加的新类系统,用于处理创建对象构造函数的琐碎情况。我们展示了如何使用它来编写如下代码: c […]...

  7. 数据标注-数据处理分类篇 – 觉醒向量数据标注

    数据标注-数据处理分类篇 我们是靠眼睛、耳朵来捕获外界信息,然后将信息通过神经元传递给我们的大脑,最后我们的大 […]...

  8. Java 日志体系

    Java 日志体系 一、简介 SLF4J:Simple Logging Facade For Java 。是一 […]...

展开目录

目录导航