-1

重複の可能性:
Java String.equals と ==

ウサギとカメのレースをシミュレートするプログラムを書いています! getName() を使用して、スレッドが実行しているオブジェクトを確認し、それに基づいてオブジェクトの値をインクリメントしています。これは私のコードです:

public void run()
{
    try{
    for(int i=0;i<100;i++)

    {
                System.out.println(Thread.currentThread().getName());
        if(Thread.currentThread().getName() == "HARE")
        {

            hare++;
            System.out.println("hare thread");
            Thread.sleep(100);
            if(hare ==  49) 
            {
                Thread.sleep(2000);
            }   
        }
        if(Thread.currentThread().getName() == "TURTLE")
        {
            turtle++;
            Thread.sleep(250);  
        System.out.println("Turtle Thread");

        }

問題は、スレッドの名前を正確に検出したと思っても、if ブロック内に入らないことです。PS私はJavaマルチスレッドが初めてです。コードをご覧いただきありがとうございます。

4

2 に答える 2

4
Thread.currentThread().getName() == "HARE"

この方法で文字列を比較することはできません。

Thread.currentThread().getName().equals("HARE");

メソッドはequals大文字と小文字を区別します。

于 2012-10-29T15:00:00.637 に答える
0

文字列/オブジェクトを比較する.eqauls()代わりに使用する必要があります。==

したがって、コードは次のようになります。

Thread.currentThread().getName().equals("HARE")

==参照の等価性を比較します。つまり、両方の参照が同じオブジェクトを指しているかどうかを意味します。equals()メソッドはコンテンツの同等性を行います。つまり、文字列が同じかどうかをチェックします(これはあなたが必要としたものです)。

于 2012-10-29T15:00:14.457 に答える