2011-10-31 45 views
1

我有一個應用程序,我現在正在開發多人遊戲。但是我沒有2個手機,所以我一直在我的電腦上運行一個單獨的程序(注意:不是模擬器!),它模擬我的程序和多玩家方面。Android - 比較兩個相同的InetAddress失敗?

但是在PC上我有以下代碼:

Packet input = inputQueue.take(); 

       if (clientAddress == input.getAddress()) 
       { 
        switch (input.type) 
        { 

這工作得很好,包只是一個簡單的類,我寫取信息進行數據報文包和的getAddress()的返回一個InetAddress。客戶地址先前在代碼中設置。

但是,Android應用程序具有完全相同的代碼,字面上線條完全相同,並且此InetAddress不會等同於另一個?如果我使用getHostName()或其他東西來獲取2個InetAddress的字符串,然後比較它們,那麼它就等於另一個。

我做錯了什麼,並假設一些想法我可以比較兩個對象與==標誌?它應該是.equals()?我認爲android使用了相同的java.net代碼,但可以有區別嗎?

什麼是確保使用InetAddress的地址相同的最佳方式?

+0

在處理非靜態的對象(或者,在字符串的情況下還有#intern():ed)時,您應該始終使用equals(..)。最保險的賭注是保持原始數據的==。 – Jens

回答

8

它應該是equals()。在Java中,總是使用equals來比較對象。 ==運算符比較引用,而不是內容。

+0

是的,我認爲是這種情況,但我很困惑,爲什麼它在PC上運行,代碼在整個項目中都是一樣的。我會改變兩個! – iexus

2

不使用==比較,它檢查相同的對象,而不是相同的內容。請使用.equals()