2015-04-03 135 views
0

我是新來的java,根據我的理解 String = "ABC"將存儲在字符串池和String s=new String("ABC")將創建一個新的內存來存儲值。如果我的理解是正確的,如何證明這一點,而不使用==equals()方法? 我們可以使用散列碼證明這一點嗎? 我生成hashcode值爲兩個,它返回相同的值...爲什麼是...區分字符串和新字符串存儲在不同的內存

+0

因爲即使內存中的對象不相同,值是,並且等於將返回true。如果equals返回true,那麼hashcode必須返回相同的值(除非您打算編寫代碼,需要花費一些額外的調試時間) – Stultuske 2015-04-03 10:56:14

+0

是否有任何方法可以在不使用equals的情況下證明這一點? – Ramakrishna 2015-04-03 10:58:48

+0

來證明什麼,到底是什麼?這兩個對象是平等的?你可以使用compareTo方法 – Stultuske 2015-04-03 10:59:37

回答

0

...如何證明這一點,而不使用==或equals()方法?

最好的辦法來證明它在Java代碼中是使用==

當然,你不能在字符串上使用hashcode來證明它,因爲它們將具有相同的散列碼。要理解這是爲什麼,請閱讀javadocString.hashCode()。它解釋瞭如何計算字符串的哈希碼。

1 - 您可以通過比較System.identityHashCode(Object)返回的值來證明。然而,這是一個循環的方法,證明依賴於對身份哈希碼實際意義的瞭解。


我產生了兩個哈希碼值,它返回相同的值......這是爲什麼......

閱讀的javadoc ......那麼你就會明白了。

-1

你不能使用散列碼來證明這一點,因爲如果兩個字符串的值是相等的,這意味着它們具有相同的散列碼值。

您可以通過使用此運算符==比較它們的參考來證明它。

看一下這個What's the difference between ".equals" and "=="?瞭解equal方法和==算子之間的確切區別。

+0

不適,實際上錯誤的解釋。 – Crazyjavahacking 2015-04-03 12:28:34

+0

具有相同值的兩個字符串具有相同的散列碼,並且此運算符「==」比較字符串的引用。 爲什麼這個解釋不正確? – Anarki 2015-04-03 13:56:39

+0

對不起,我誤解了這一點,它是正確的。 – Crazyjavahacking 2015-04-03 17:16:40