2

現在マルチプレイヤーを開発しているアプリがあります。しかし、私は2台の電話を持っていないので、自分のPCで別のプログラムを実行しています(注:エミュレーターではありません!)。これは、自分のプログラムとマルチプレイヤーの側面をシミュレートします。

ただし、PCには次のコードがあります。

Packet input = inputQueue.take();

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

これは正常に機能します。Packetは、Datagramパケットから情報を取得するために作成した単純なクラスであり、getAddress()はInetAddressを返します。クライアントアドレスは、コードで以前に設定されています。

ただし、Androidアプリのコードはまったく同じで、文字通り行ごとにまったく同じであり、このInetAddressは他のコードと同じではありませんか?getHostName()などを使用して2つのInetAddressの文字列を取得し、それらを比較すると、他の文字列と等しくなります。

私は何か間違ったことをしていて、2つのオブジェクトを==記号で比較できると考えて何かを想定していますか?.equals()である必要がありますか?androidは同じjava.netコードを使用していると思いましたが、違いはありますか?

InetAddressを使用して同じアドレスを確実に取得するための最良の方法は何ですか?

4

2 に答える 2

10

する必要がありますequals()。Javaでは、常にを使用してオブジェクトを比較しますequals==演算子は、コンテンツではなく参照を比較します。

于 2011-10-31T14:32:13.890 に答える
3

を使用して比較しないでください==。同一のコンテンツではなく、同一のオブジェクトをチェックします。代わりに。を使用して.equals()ください。

于 2011-10-31T14:32:40.263 に答える