JDK源码阅读--String

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence

String类:
    由final修饰,表示不可变的
//String类中的字段
/** The value is used for character storage. */
private final char value[];

/** Cache the hash code for the string */
private int hash; // Default to 0


equals方法的源码:
 1 /**
 2      * 将此字符串与指定对象进行比较
 3      *
 4      * @param  anObject  指定的对象
 5      *         The object to compare this {@code String} against
 6      *
 7      * @return  如果两个字符串相等(只要字符串的内容相等就算相等),则返回true,否则返回false.
 8      *
 9      * @see  #compareTo(String) str1.equals(anObject) str2表示指定的对象,str1表示要比较的字符串
10      * @see  #equalsIgnoreCase(String)
11      */
12     public boolean equals(Object anObject) {
13         //如果这两个对象相等,直接返回true。因为==相等表示地址相同,字符串的内容也相同。
14         if (this == anObject) {
15             return true;
16         }
17         //如果anObject是字符串类型的
18         if (anObject instanceof String) {
19             //强转为String类型
20             String anotherString = (String) anObject;
21             //获取要比较的字符串的长度
22             int n = value.length;
23             //如果要比较的字符串长度 和 被比较的对象的字符串长度相同,再进行继续比较
24             if (n == anotherString.value.length) {
25                 char v1[] = value;//将要比较的字符串转成char[]数组
26                 char v2[] = anotherString.value;//将被比较的对象转成char[]数组
27                 int i = 0;
28                 //两个数组中的索引相同的字符是否都相同,只要有一个不相同,就返回false
29                 //char类型的数据进行比较的时候,会进行类型提升,提升为int类型进行比较
30                 while (n-- != 0) {
31                     if (v1[i] != v2[i])
32                         return false;
33                     i++;
34                 }
35                 return true;
36             }
37         }
38         return false;
39     }



猜你喜欢

转载自www.cnblogs.com/lixianyuan-org/p/10471813.html