-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 回答