学习Java,容易被你忽略的小细节(2)
昨天心情真的太糟糕了,寫(xiě)完《學(xué)習(xí)Java,值得注意你注意的問(wèn)題(1)》之后,迎來(lái)些許的支持以后就是一片片的譴責(zé)。我的主頁(yè)上涌現(xiàn)出許許多多Java方面的牛人,譴責(zé)我水平太低,寫(xiě)的問(wèn)題太初級(jí)。搞得我非常抑郁,直接導(dǎo)致我和我的女神聊天到后半夜2點(diǎn)多,就是想一吐心中不快。不過(guò)這里我還真應(yīng)該謝謝他們,沒(méi)有他們我真找不到借口和我的女神聊天呢。謝謝你們啊。
我知道自己水平不夠,但是我真的有用心在寫(xiě)博客。每次博客上寫(xiě)出的問(wèn)題都是事前詢問(wèn)過(guò)同學(xué)的,都是同學(xué)們比較迷茫的區(qū)域,都是一些只知其然不知其所以然的部分。因?yàn)椤秾W(xué)習(xí)Java,值得你注意的問(wèn)題》吸引了太多Java牛人的關(guān)注,我不得不被迫將文章的名字更改為《學(xué)習(xí)Java,容易被你忽略的小細(xì)節(jié)》。這里請(qǐng)大家注意了我說(shuō)的是容易被你忽略的小細(xì)節(jié),這些細(xì)節(jié)可能對(duì)于Java牛人來(lái)說(shuō)真的就像南極冰川上一座不起眼的冰山,微不足道。所以我有必要在這里表明態(tài)度,請(qǐng)各位Java牛人繞路,不要抨擊小弟了。我只想向和我一樣初學(xué)Java的同學(xué)提供一些我個(gè)人覺(jué)得有價(jià)值的建議。
吐槽完畢,我們閑話少說(shuō)。下面就來(lái)介紹一下,學(xué)習(xí)Java,容易被你忽略的小細(xì)節(jié)(2)
在學(xué)習(xí)String類(lèi)的時(shí)候,在書(shū)上看到這樣一段代碼:
if(string1 == string2)System.out.println("string1 and string2 are the same object");elseSystem.out.println("string1 and string2 are different object");下面附帶文字,運(yùn)算符“==”只能檢查string1和string2是否指向同一個(gè)對(duì)象,它不能辨別兩個(gè)不同的對(duì)象是否包含相同內(nèi)容。因此,不能用“==”檢測(cè)兩個(gè)字符串變量是否具有相同內(nèi)容,而equals()方法可以用于對(duì)象內(nèi)容相等的比較。
遇到這種問(wèn)題顯然我會(huì)自己動(dòng)手調(diào)試一下才會(huì)甘心。但是調(diào)試結(jié)果領(lǐng)我很郁悶。
代碼:
public class TestDemo2{public static void main(String[] args){String string1 = "testDemo";String string2 = "testDemo";if(string1 == string2)System.out.println("string1 and string2 are the same object");elseSystem.out.println("string1 and string2 are different object");} }調(diào)試結(jié)果:
"string1 and string2 are the same object"???這是要鬧哪樣啊,難道書(shū)上寫(xiě)錯(cuò)了?難道運(yùn)算符“==”也可以用于對(duì)象內(nèi)容相等的比較?
看到調(diào)試結(jié)果以后我又在圖書(shū)館的書(shū)架上找了幾本《Java程序設(shè)計(jì)》相關(guān)的書(shū)籍仔細(xì)地閱讀,最后找打了問(wèn)題的原因。
在一本書(shū)籍的一個(gè)角落里有這樣一段話:
注:程序設(shè)計(jì)中頻繁使用字符串。為了提高效率,節(jié)省內(nèi)存,Java虛擬機(jī)盡力確認(rèn)相同的串并把它們存放在同一內(nèi)存空間,但這不能保證所有相同的串都具有相同的內(nèi)存地址。因此還需要使用equal()方法判斷兩個(gè)串內(nèi)容是否相同,使用“==”判斷兩個(gè)串的引用是否相同(即,指向相同的內(nèi)存地址)。
雖然Java虛擬機(jī)是為了提高效率,節(jié)省內(nèi)存。但是顯然差點(diǎn)誤導(dǎo)我嘛,壞人!!!
在Java程序設(shè)計(jì)中遇到判斷字符串內(nèi)容是否相等的問(wèn)題時(shí),建議代碼:
if(string1.equals(string2))System.out.println("string1 and string2 have the same contents"); else System.out.println("string1 and string2 are not equal");雖然上面問(wèn)題很基礎(chǔ),但是我相信一定有很多同學(xué)在學(xué)習(xí)到相同知識(shí)點(diǎn)的時(shí)候也會(huì)和我一樣有迷惑。請(qǐng)大家不要單單記住判斷字符串相等的時(shí)候應(yīng)該用equals()方法,不能用“==”。最好做到知其然,也知其所以然。都是Java虛擬機(jī)惹的禍。
(ps:經(jīng)過(guò)博友kongkongyzt的指點(diǎn),我重新測(cè)試了一下)
代碼:
public class TestDemo2{public static void main(String[] args){//string1 和string2 內(nèi)容相同,地址不同。String string1 = new String("testDemo");String string2 = new String("testDemo");if(string1 == string2)System.out.println("string1 and string2 are the same object");elseSystem.out.println("string1 and string2 are different object");if(string1.equals(string2))System.out.println("string1 and string2 have the same contents");else System.out.println("string1 and string2 are not equal");} }測(cè)試結(jié)果:
從上面測(cè)試結(jié)果可以很清楚的看出對(duì)于String類(lèi),equals()方法和運(yùn)算符“==”在使用上的區(qū)別。在這里非常感謝博友kongkongyzt的指點(diǎn)。
?
上面就是學(xué)習(xí)Java,容易被你忽略的小細(xì)節(jié)(2)。
歡迎繼續(xù)關(guān)注本博更多新鮮動(dòng)向,博主QQ:2584451009,有什么建議和忠告歡迎評(píng)論或留言。
轉(zhuǎn)載于:https://www.cnblogs.com/FlightButterfly/p/3350150.html
總結(jié)
以上是生活随笔為你收集整理的学习Java,容易被你忽略的小细节(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【概率统计】(在更)
- 下一篇: 【Jetson Nano学习笔记】3.