从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. java 各种循环遍历 – cag2050

    java 各种循环遍历 遍历方式选择: 实现了 RandomAccess 接口的 list,优先选择普通 fo […]...

  2. 同行:成长路上的三人行

    成长的路上,有时会感觉陷入了停顿,就像前行的一辆车陷在了泥地里,不管你怎么加油踩油门,它只是在原地打转而无法继 […]...

  3. UWP: 通过命令行启动 UWP 应用

    最近在开发应用的过程中,我遇到了如标题所述的需求,其实主要是为了能够快捷启动应用,正像我们可以在“运行”对话框 […]...

  4. spring-boot-2.0.3不一样系列之源码篇 – run方法(四)之prepareContext,绝对有值得你看的地方

    前言   此系列是针对springboot的启动,旨在于和大家一起来看看springboot启动的过程中到底做 […]...

  5. MySQL基本使用

    MySQL — 基本使用 Relational Database Management Syste […]...

  6. 远程登录、远程拷贝命令

    远程登录、远程拷贝命令 学习目标 能够写出远程拷贝、远程登录命令 1. 远程登录、远程拷贝命令的介绍 命令 说 […]...

  7. 【工作Vlog】Jmeter响应结果乱码解决方案

    资料:https://blog.51cto.com/ydhome/1864340 方法一:使用后置控制器“Be […]...

  8. 一次完败的Release

    一次完败的Release 去年8月份加入一家创业公司,和原同事做VR相关的产品开发,到18年正月初七,总共re […]...

展开目录

目录导航