String类equals方法详解(包含同类不同对象访问value)

2024-01-28 19:32

本文主要是介绍String类equals方法详解(包含同类不同对象访问value),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 开门见山—贴源码
public boolean equals(Object anObject) {//==是比较传入的anObject对象和本对象地址是否一致,//一致返回ture//不一致返回falseif (this == anObject) {return true;}//接着判断anObject是否为String类型或者是其子类//是则进入下一步判断//不是则直接返回falseif (anObject instanceof String) {//既然进入判断则,证明可以强转为String 便于判断String anotherString = (String)anObject;//value是字符串转变的字符数组,有private修饰int n = value.length;//判断传入字符串长度和原对象字符串长度是否一致//不一致则一定不同if (n == anotherString.value.length) {char v1[] = value;//Java的访问控制权限是定义在类级别的,//这里的anotherString.value//是在同类(String)中访问的//并不会造成访问不到的情况char v2[] = anotherString.value;int i = 0;//从后往前遍历,字符不等则放回falsewhile (n-- != 0) {if (v1[i] != v2[i])return false;i++;}//循环结束,没有发现有不同,则返回truereturn true;}}return false;}
2. 庐山内幕—收获
  1. 流程:
    1. 判断是否地址相同
    2. 判断是否类型相同
    3. 判断是否长度相同
    4. 判断是否全部字符相同
    5. 都判断相同,则两个对象相同
    6. 若有一者不同,则全部不同。
  2. 意外惊喜
String anotherString = (String)anObject;
//value是字符串转变的字符数组,有private修饰
int n = value.length;
//判断传入字符串长度和原对象字符串长度是否一致
//不一致则一定不同
if (n == anotherString.value.length) {

在这段源码中我们可以发现,里面存在着一个anotherString.value.length这个东西。
为什么会觉得意外呢?因为value是在String中的一个private修饰的成员变量char类型数组。
那么问题来了,在这个String类中this对象的equals方法中访问anotherString对象的private修饰的value访问得到吗?
答案是访问得到的。
为什么呢?
因为在Java中访问权限修饰的是类于类之间的访问,而不是同类的访问。
一个被private修饰的变量,要么是在本类中被访问,要么是本类中提供相应的访问方法提供访问。

源码研究深一点,幸福指数多一点。 ---------swrici

这篇关于String类equals方法详解(包含同类不同对象访问value)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654569

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它