2011-10-31 18 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()