每个String对象在创建的时候都构造了一个char类型的final声明的不可替换数组,数组中的每一个元素即字符串对应的每一个字符如图:
String的equals()在比较的时候会进行两步比较:
1、比较存储的地址是否相同;
2、比较字符串的内容是否相同,也就是比较每个char是否相同。
代码如下:
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) { // 从n -> 1循环 if (v1[i] != v2[i]) // 比较每一个基本char数据类型是否不等 return false; i++; // 由0到n-1循环 } return true; // 全部字符相等 } } return false; }
1、入参是一个Object对象,方法先通过 == 号来判断对象的地址是否相同,如果相同直接返回true;
2、当入参是一个字符串的时候向下强转成字符串,且在while循环里面比较字符串中value数组每个字符是否相等,如果全部相等则表示内容相等,返回true;