首页 > 其他分享 >Object.equals 和 String.equals的区别

Object.equals 和 String.equals的区别

时间:2023-07-08 23:11:55浏览次数:32  
标签:false 常量 Object equals 字符串 String

一.  源码展示:

1. Object.equals:  

  ①引用类型地址值比较,直接返回结果:true || false

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

 

2. String.equals:  

  ① 判断地址值是否相等,若相等 返回 true,若不等则进入下列判断 ;

  ② 判断参数是否为String类型,若不是 返回false,若是则进入下列判断;

  ③ 判断字符串长度是否相等,若不等 返回false,若相等则进入下列判断 ;

  ④ 判断索引位置的字符是否相同,若不等 返回false,若相等,则返回true;

  • 字符串的内容相等指的是字符序列完全相同,包括字符的顺序和大小写敏感。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {

  private final char value[];
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; } }

 

二. 二者区别

   1. 作用域:

     Object类是Java中所有类的基类,因此每个对象都继承了equals()方法,自定义实例对象默认使用Object.equals()比较值是否相等,且可以通过重写equals() 实现自定义比较。

     String类是Java中的一个内置类,它代表字符串对象,String重写了Object的equals()方法,仅用于做String字符串的值比较。

   2.  比较方式:

     Object.equals() 比较的是对象的引用是否相同。

     String.equals() 比较的是字符串的内容是否相同。

 

三.  代码层面展示

public static void main(String[] args) {
        Object obj1 = new Object();
        Object obj2 = new Object();
        System.out.println("Object地址值比较:" + obj1.equals(obj2));  // 输出结果: false

        String str1 = "Hello";
        String str2 = "hello";
        String str3 = " hello ";
        String str4 = new String("Hello");
        System.out.println("Hello::hello比较(区分大小写):" + str1.equals(str2)); // 输出结果: false
        System.out.println("Hello:: hello (前后存在空格):" + str1.equals(str3)); //  输出结果: false
        System.out.println("比较常量池(使用new操作符):" + str1.equals(str4));    //  输出结果: true

    }

打印输出:
  Object地址值比较:false
  Hello::hello比较(区分大小写):false
  Hello:: hello (前后存在空格):false
  比较常量池(使用new操作符):true

 

 四. 拓展

  String常量池:

    在Java中,String常量池是一种特殊的内存区域,用于存储字符串常量。它是为了节省内存空间和提高性能而设计的。

    当我们使用字符串字面值创建一个字符串对象时,Java编译器会首先检查字符串常量池中是否已经存在相同内容的字符串。如果存在,则返回常量池中的引用;如果不存在,则在常量池中创建一个新的字符串对象,并返回该引用。

    由于String类是不可变的,也就是说一旦创建了字符串对象,它的内容就不能被改变。因此,多个字符串对象可以共享同一个字符串常量池中的内容,这样可以减少内存的占用。

    需要注意的是,通过调用String的intern()方法可以将一个字符串对象加入到常量池中,并返回常量池中的引用。这在某些场景下可能会有用,但要谨慎使用以避免不必要的内存开销。

    总之,String常量池是Java中用于存储字符串常量的特殊内存区域,可以提高内存利用率和程序性能。

   

 

标签:false,常量,Object,equals,字符串,String
From: https://www.cnblogs.com/victor-sin/p/17538027.html

相关文章

  • Java字符串比较 == 和 equals方法的区别
    今天在排除一个bug的时候出现了一个很低级但是也很容易被忽视的错误,在此写了一个小例子做记录。首先我先说一下错误的场景,我读取了一段json数据,并使用JSONObject的实例对象的getString方法去拿到了一个value数据,由于我忽视了getString方法的返回值是一个String对象,所以我在后面......
  • AtCoder Grand Contest 058 D Yet Another ABC String
    洛谷传送门AtCoder传送门OrzH6_6Q,感谢他给我们带来了这道容斥好题。这个东西看起来很不好搞。可以尝试容斥。但是我们要容斥啥?钦定ABC不出现,其他任意?感觉还是很难算。观察不合法子串,发现它们很有特点。如果我们钦定\(\texttt{A}\)为\(0\),\(\texttt{B}\)为\(1\),\(\te......
  • [oeasy]python0071_字符串类型_str_string_下标运算符_中括号
    回忆上次内容上次分辨了静态类型语言动态类型语言 python属于对类型要求没有那么严格的动态类型语言 对初学者很友好不过很多时候也容易弄不清变量类型 直接修改代码增强程序的可读性把变量的类型明确标......
  • C++黑马程序员——P193-196. string容器 字符串比较,字符存取,字符串插入和删除,子串
    P193.string容器——字符串比较P194....——字符存取P195....——字符串插入和删除P196....——子串获取P193.字符串比较 ——————————————————————————————————————————————————————————1//字符......
  • C++黑马程序员——P189-192. string容器 构造函数,赋值,拼接,查找和替换
    P189.string容器——构造函数P190....——赋值操作P191....——字符串拼接P192....——字符串查找和替换P189.构造函数———————————————————————————————————————————————————————————————......
  • 恢复oracle数据库DROP表误删除的数据 注意此时的表名称已经被重新命名,table_name和obj
    恢复oracle数据库DROP表误删除的数据注意此时的表名称已经被重新命名,table_name和object_name就是回收站中的存放表名。https://blog.csdn.net/qq_34253619/article/details/124434357数据恢复方法的原理是因为oracle数据库在删除表时会将删除信息存放于某虚拟“回收站”中而......
  • 【Scala】在IDEA中右键没有添加scala object和class的选项
    首先要确保在AddFrameworkSupprt中添加了scala(选中项目根目录) 然后在File->ProjectStructure...中选择Libraries   最后是关键,要选择SourceRoot文件夹上级目录,一般是xxx.main  在sourceroot文件夹上右击,New里就有了ScalaClass ......
  • API和String字符串介绍
    API1、如何使用Java已经写好的东西(方法,类)API(Applicationprogramminginterface):应用程序编程接口简单理解:API就是别人已经写好了的东西,我们不需要自己编写,直接使用即可啊Publicstaticvoidmain(String[]args){ Randomr=newRandom(); intnumber=r.nextInt(100);}......
  • package com.ws.byd.bmgl.bmzdpz:编码字典------bydobject
    controller:packagecom.ws.byd.bmgl.bmzdpz.controller;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.lang.O......
  • openssl: error while loading shared libraries: libssl.so.3: cannot open shared o
    这个错误表明在加载openssl时找不到共享库文件libssl.so.3。这可能是由于缺少该共享库或者库文件路径不正确导致的。要解决这个问题,您可以尝试以下几种方法:安装OpenSSL:确保您的系统上已经正确安装了OpenSSL。您可以使用操作系统的包管理器来安装OpenSSL,具体命令可能因您......