String的equals()方法源码解析

时间:2022-02-12 16:15:42

每个String对象在创建的时候都构造了一个char类型的final声明的不可替换数组,数组中的每一个元素即字符串对应的每一个字符如图:

String的equals()方法源码解析

String的equals()方法源码解析

String的equals()在比较的时候会进行两步比较:

1、比较存储的地址是否相同;

2、比较字符串的内容是否相同,也就是比较每个char是否相同。

代码如下:

 1 public boolean equals(
 2     Object anObject // 传入比较的字符串
 3     ) {
 4     // 先比较对象地址是否相等--------------------------
 5     if (this == anObject) { // 比较地址是否相同
 6         return true;
 7     }
 8     // 再比较字符串内容是否相等------------------------
 9     if (anObject instanceof String) { // 入参如果是字符串
10         String anotherString = (String)anObject; // 强转
11         int n = value.length; // 获取当前字符串的字符数组长度
12         if (n == anotherString.value.length) { // 如果当前字符数组长度等于入参的字符数组长度
13             char v1[] = value; 
14             char v2[] = anotherString.value;
15             int i = 0;
16             while (n-- != 0) { // 从n -> 1循环
17                 if (v1[i] != v2[i]) // 比较每一个基本char数据类型是否不等
18                     return false;
19                 i++; // 由0到n-1循环
20             }
21             return true; // 全部字符相等
22         }
23     }
24     return false;
25 }

1、入参是一个Object对象,方法先通过 == 号来判断对象的地址是否相同,如果相同直接返回true;

2、当入参是一个字符串的时候向下强转成字符串,且在while循环里面比较字符串中value数组每个字符是否相等,如果全部相等则表示内容相等,返回true;