String底层源码
String的equals为什么可以判断字符串内容?
底层把String的内容转换为字符数组,依次比较ASCII码
创一个MyString类
package com.dream.test02;
public class MyString {
private String value;
public MyString(String value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if(this == obj){
return true;
}
if(obj instanceof MyString){
MyString m = (MyString) obj;
//['a','b','c']
char[] v1 = this.value.toCharArray();//把当前对象的str转换为字符数组
//['a','b','c']
char[] v2 = m.value.toCharArray();//把当前对象的str转换为字符数组
if(v1.length != v2.length){
return false;
}
for (int i = 0; i < v2.length; i++) {
if(v1[i] != v2[i]){
return false;
}
}
return true;
}
return false;
}
@Override
public String toString() {
return value;
}
}
package com.dream.test02;
public class Test03 {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2);//false
System.out.println(str1.equals(str2));//true - 比较两个字符串内容是否相同
System.out.println(str1);//默认调用toString
System.out.println(str2);//默认调用toString
System.out.println("--------------");
MyString m1 = new MyString("abc");
MyString m2 = new MyString("abc");
System.out.println(m1 == m2);//false
System.out.println(m1.equals(m2));
System.out.println(m1);
System.out.println(m2);
}
}