學習Java,容易被你忽略的小細節(2)


  昨天心情真的太糟糕了,寫完《學習Java,值得注意你注意的問題(1)》之后,迎來些許的支持以后就是一片片的譴責。我的主頁上涌現出許許多多Java方面的牛人,譴責我水平太低,寫的問題太初級。搞得我非常抑郁,直接導致我和我的女神聊天到后半夜2點多,就是想一吐心中不快。不過這里我還真應該謝謝他們,沒有他們我真找不到借口和我的女神聊天呢。謝謝你們啊。

  我知道自己水平不夠,但是我真的有用心在寫博客。每次博客上寫出的問題都是事前詢問過同學的,都是同學們比較迷茫的區域,都是一些只知其然不知其所以然的部分。因為《學習Java,值得你注意的問題》吸引了太多Java牛人的關注,我不得不被迫將文章的名字更改為《學習Java,容易被你忽略的小細節》。這里請大家注意了我說的是容易被你忽略的小細節,這些細節可能對於Java牛人來說真的就像南極冰川上一座不起眼的冰山,微不足道。所以我有必要在這里表明態度,請各位Java牛人繞路,不要抨擊小弟了。我只想向和我一樣初學Java的同學提供一些我個人覺得有價值的建議。

  吐槽完畢,我們閑話少說。下面就來介紹一下,學習Java,容易被你忽略的小細節(2)

  在學習String類的時候,在書上看到這樣一段代碼:

		if(string1 == string2)
    			System.out.println("string1 and string2 are the same object");
		else
    			System.out.println("string1 and string2 are different object");

  下面附帶文字,運算符“==”只能檢查string1和string2是否指向同一個對象,它不能辨別兩個不同的對象是否包含相同內容。因此,不能用“==”檢測兩個字符串變量是否具有相同內容,而equals()方法可以用於對象內容相等的比較。

  遇到這種問題顯然我會自己動手調試一下才會甘心。但是調試結果領我很郁悶。

  代碼:

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");
		else
    			System.out.println("string1 and string2 are different object");
	}
}

  調試結果:

"string1 and string2 are the same object"???這是要鬧哪樣啊,難道書上寫錯了?難道運算符“==”也可以用於對象內容相等的比較?

看到調試結果以后我又在圖書館的書架上找了幾本《Java程序設計》相關的書籍仔細地閱讀,最后找打了問題的原因。

在一本書籍的一個角落里有這樣一段話:

注:程序設計中頻繁使用字符串。為了提高效率,節省內存,Java虛擬機盡力確認相同的串並把它們存放在同一內存空間,但這不能保證所有相同的串都具有相同的內存地址。因此還需要使用equal()方法判斷兩個串內容是否相同,使用“==”判斷兩個串的引用是否相同(即,指向相同的內存地址)。

雖然Java虛擬機是為了提高效率,節省內存。但是顯然差點誤導我嘛,壞人!!!

在Java程序設計中遇到判斷字符串內容是否相等的問題時,建議代碼:

if(string1.equals(string2))
	System.out.println("string1 and string2 have the same contents");
else 
	System.out.println("string1 and string2 are not equal");

  雖然上面問題很基礎,但是我相信一定有很多同學在學習到相同知識點的時候也會和我一樣有迷惑。請大家不要單單記住判斷字符串相等的時候應該用equals()方法,不能用“==”。最好做到知其然,也知其所以然。都是Java虛擬機惹的禍。

(ps:經過博友kongkongyzt的指點,我重新測試了一下)

  代碼:

public class TestDemo2{
	public static void main(String[] args){
		//string1 和string2 內容相同,地址不同。
		String string1 = new String("testDemo");
		String string2 = new String("testDemo");
		if(string1 == string2)
    			System.out.println("string1 and string2 are the same object");
		else
    			System.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");
	}
}

  測試結果:

  從上面測試結果可以很清楚的看出對於String類,equals()方法和運算符“==”在使用上的區別。在這里非常感謝博友kongkongyzt的指點。

  

 

  上面就是學習Java,容易被你忽略的小細節(2)。

  歡迎繼續關注本博更多新鮮動向,博主QQ:2584451009,有什么建議和忠告歡迎評論或留言。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM