String中的equals底层解析

    技术2022-07-11  86

    截取部分代码进行试验

    //equals方法 String str1 = "Jim"; String str2 = "Jim"; Object anObject = str2; System.out.println(str1.equals(str2)); String str3 = "Jim"; String str4 = new Date(); System.out.println(str3.equals(str4)); String str5 = new String("Jim"); System.out.println(str3.equals(str5));

    String中equals底层代码

    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) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }

    三个if标为if1、2、3 str1和str2使用equals if1 成立 true str3和str4使用equals if1和if2 都失败 false

    str3和str5使用equals if1失败 if2成功 String anotherString = (String)anObject; 上转型对象下转型用于调取String中的value int n = value.length; str3字符串组成的数组的长度 anotherString.value.length str5中字符串组成的数组的长度 n == anotherString.value.length if3 如果if3成立,则继续往下走,如果if3失败,则false;(长度不同肯定不同) 继续往下走 char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } 依次比较两个数组中的元素是否相同,有一个不相同则失败false,否则true;

    Processed: 0.009, SQL: 9