前言
我們在學習Java中通常有使用的String這個類,可是我們也不會有多少人去看過它吧?接下來是我一些對String類的理解和例子分析。
publicclassreadString{
publicstaticvoidmain(String[] args){
String a1="1000";
String a2="1000";
String a3=newString("1000");
String a4=newString("1000");
System.out.println(a1.equals(a2));
System.out.println(a3.equals(a4));
System.out.println(a3==a4);
}
}
大家覺得結(jié)果是什么呢?
答案就是

不知道在看答案的你是不是答對了呢
其實這個要講起來又是涉及到==和equals的區(qū)別。我的理解是,==是比較兩個類的應邀地址是不是指向了同一個地方。而equals是基于定義的equals方法來具體實現(xiàn)的。舉個栗子:
String的equals方法:

這里我們就可以知道:
1.String的equals是先判斷是不是同一個對象,如果是就返回true.
2.然后判斷a3對象是不是String類,然后定義a4賦值為a3
3.初始化n用來記錄值的a3的長度。
4.如果a4的長度等于n
5.定義一個數(shù)組存儲a3.v2存儲a4的長度
6.比較兩個數(shù)組的值是不是相等,不等返回false,相等返回true
這里我們就可以知道了a3 equal a4的。
而當String一個對象””時,JVM是先根據(jù)””里面的值去字符串池里面找,如果沒有就創(chuàng)建一個,如果有就引用,所以這里面的過程大致是(JVM沒這么簡單,粗糙粗糙….)

所以a1等于a2,a3==a4為false,是因為它們開辟了新的內(nèi)存,指向地址不同,所以為false.
所以String類原來是這樣的呀