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