首页 > 其他分享 >String的equals方法的实现原理以及==跟equals的区别

String的equals方法的实现原理以及==跟equals的区别

时间:2024-08-01 11:24:40浏览次数:15  
标签:String 相同 对象 equals 字符串 原理 比较

public class StringTest05 {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = new String("hello");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

此代码输出的结果看似是相同的,但其实不同

因为==和equals是有区别的

对于基本数据类型来说,比较的时候只能进行==比较,比较的值是否相同,equals不能使用; 对于普通引用类型的变量来说,==和equals是一样的,都是比较两个对象的地址值是否相同, 如果相同为true不同为false;对于字符串来说,==比较的是两个对象的地址,而equals比较的是两个字符串的内容,会将字符串转换为字符数组,进行逐一比较,但是为了比较效率,String的equals方法会进行三重判断。第一重判断比较两个对象的地址是否相同,如果相同则直接返回true表示两个对象那个相同,如果不同则进行第二重判断,判断传递过来的对象是不是由String创建的,如果不是则直接返回false,表示两个对象不同,如果是则进行三重判断比较两个字符串的长度是否相同,如果不同则表示两个字符串对象不同,否则表示两个字符串可能相同要将字符串转换为字符数组,再逐一进行比较,完全相同的则返回true。

String的equals方法的实现原理

String的equals比较是将字符串转换为字符数组,再进行逐一比较的,但是为了提交比较 效率,String的equals方法会进行三重判断。第一重判断比较两个对象的地址是否相同,如果 相同则直接返回true表示两个对象那个相同,

如果不同则进行第二重判断,判断传递过来的对象是不是String创建的,如果不是则直接返回false,表示两个对象不同,

如果是则进行三重判断比较两个字符串的长度是否相同,如果不同则表示两个字符串对象不同,否则表示两个字符串可能相同 //要将字符串转换为字符数组,再逐一进行比较,完全相同的则返回true。






标签:String,相同,对象,equals,字符串,原理,比较
From: https://blog.csdn.net/G123356/article/details/140824152

相关文章

  • 如何解决toString检测?
      对于一些浏览器环境检测时,比较常见的toString方法检测,查看函数方法是否修改,从而来检测爬虫行为,以下是一种过toString检测的方法。1、修改toString方法。  代码如下:(()=>{"usestrict";const$toString=Function.toString();constmyFunction_toStrin......
  • 立创EDA专业版原理图纸LOGO更改
    立创EDA专业版原理图纸LOGO更改概述:刚开始使用立创EDA的时候,查找过如何去修改原理图的LOGO,但时间一长就忘记了,导致今天需要更新的时候,又重头再来,浪费了很多时间。于是在重新找到方法之后,特此记录。以下为创建原理图模板并修改LOGO的步骤:步骤1:新建元件库(若之前没有)此处的......
  • hashCode方法 和 equals()方法
    packagecom.coding.spring.mvc;importjava.util.HashSet;publicclassUser{privateStringname;publicUser(Stringname){this.name=name;}@Overridepublicbooleanequals(Objectobj){Useruser=(User)obj;......
  • 02.计算器存储器的原理
    02.计算器存储器的原理目录介绍01.什么是存储器1.1了解存储器是什么1.2存储器类型02.存储器系统设计2.1存储器分层设计2.2存储器层次结构2.3高速缓存设计思想2.4虚拟内存访问内存03.存储器类型3.1按照材质划分3.2按芯片类型划分3.3内存vsCPU3.4......
  • CF873B Balanced Substring
    Abstract传送门本题定义平衡串为0和1数量相等的字符串,要求我们找出给定01串中含有的最大平衡串。Idea如果把1视为+1,0视为-1,那么一个01串是平衡串当且仅当其和值为0,那么问题就转变为寻找给定01串中和值为0的最长子段。首先做一个前缀和,a[i]表示前i项的......
  • JavaSE基础 (认识String类)
    一,什么是String类在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字符串应用又非常广泛,因此Java语言专门提供了Strin......
  • [babel] babel的工作原理
    Babel是什么Babel是一个通用的多功能的JavaScript编译器。主要用于将采用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧版本的浏览器或其他环境中。常见的用途有:语法转换通过Polyfill方式在目标环境中添加缺失的功能(通过引......
  • Java并发(十六)一文搞懂Java 线程池原理
    简介什么是线程池线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。为什么要用线程池如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建和销毁线程。如此一来,会大大降低系统的效率,可能频繁创建和销毁线程的时间......
  • RPC核心原理
    什么是RPCRPC就是远程过程调用RPC的作用屏蔽远程调用和本地调用的区别,让我们感觉就是调用本地项目内的方法。隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。RPC通信流程一个完整的RPC会涉及哪些步骤呢?在调用方程序中,RPC框架根据调用的服务接口提前生成动态代理实现类......
  • 手写MyBatis 重要基本原理框架
    1.手写MyBatis重要基本原理框架@目录1.手写MyBatis重要基本原理框架1.1第一步:IDEA中创建模块1.2第二步:资源工具类,方便获取指向配置文件的输入流1.3第三步:定义SqlSessionFactoryBuilder类1.4第四步:分析SqlSessionFactory类中有哪些属性1.5第五步:定义JDBCTransaction1.6......