震驚!原來String類是這樣的(上)

前言

我們在學習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類原來是這樣的呀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容