==和equals区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

一、数据类型

Java 数据两种类型 – 基本类型的应用类型

  • 基本类型
    基本数据类类型存的是数值本身
  • 引用类型
    引用类型变量在内存放的是数据的引用

基本类型通过 == 比较的是他们的值大小,而引用类型比较的是他们的引用地址

二、使用步骤

1.String.equals源码

代码如下(示例):

public boolean equals(Object anObject) {
  if (this == anObject) { 
    return true;
  }
  if (anObject instanceof String) { //判断对象实例是否是String
    String anotherString = (String)anObject; //强转成string类型
    int n = value.length;
    if (n == anotherString.value.length) { //如果两个字符串相等,那么它们的长度自然相等。
      //遍历两个比较的字符串,转换为char类型逐个进行比较。
      char v1[] = value;  
      char v2[] = anotherString.value;
      int i = 0;
      while (n-- != 0) {
        if (v1[i] != v2[i]) //采用`==`进行判断,如果不相同,则返回false
          return false;
        i++;
      }
      return true; //否则返回true。
    }
  }
  return false;
}

  1. 首先判断传进来的String和当前对象是否相同,相同就直接返回true;
  2. 再判断两个字符串长度是否相同
  3. 转换成char数组逐个进行比较

2.==和equals

Object的(示例):

public boolean equals(Object obj) {
  return (this == obj);
}

如果不重写equals的话,默认都会走Object父类的==,对引用变量做内存地址比较


三、了解Class中的HashCode

为什么要有hashCode?

它主要配合基于散列的集合一起工作,比如HashSet,HashTable,HashMap等
当向集合里添加元素时候,首先需要添加元素是否相同,如果集合中元素特别多的时候,用equals需要遍历,所以采用计算该对象的hashcode值,先判断在指定地址是否有对象,如果没有就会用一个table保存,如果有的话就比较key值是否相同,相同就替换,不相同就插入

问题解答

问题:两个对象值相同(x.equals(y) == true),但是可能存在hashCode不同吗?

  1. 如果两个对象值相同,有可能存在不同的hashCode。具体的实现方法是,只重写equals方法,不重写hashCode。
  2. 这种处理方式会存在风险,在实际开发中,必须遵循重写equals方法的同时也需要重写hashCode方法这一原则。否则在Java散列集合类操作中,会存在null的问题。

问题:”new String(“abc”)到底创建了几个对象

  1. 会先实例化一个字符串对象
  2. 如果“abc”常量字符串不存在,则再创建一个abc常量字符串变量

参考:

https://blog.csdn.net/q331464542/article/details/121008673

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值