为什么我可以使用.equalsIgnoreCase(“anoterString”)而不将其分配给变量或控制流语句?

时间:2012-03-15 08:39:57

标签: java

我遇到了这段代码:

    for (final String s : myList)
    {
        s.equalsIgnoreCase(test);
        updateNeeded = true;
        break;              
    }

我怀疑这不是程序员真正想做的事情。我相信他的意思是写下:

    for (final String s : myList)
    {
        if(s.equalsIgnoreCase(test))
        {
            updateNeeded = true;
                break;
        }   
    }

但是,我不明白为什么第一个代码段中没有错误。

 s.equalsIgnoreCase(test);    

因为方法.equalsIgnoreCase(“anoterString”)返回一个布尔值,它没有被赋值给任何东西或在控制流语句中使用

4 个答案:

答案 0 :(得分:5)

这只是一个方法调用。你没有拥有来将方法调用的结果用于其他任何事情。

很少忽略非void方法的结果是个好主意(特别是InputStream.read的返回值有时会被忽略)但是语言规范并没有试图将其称为问题。

答案 1 :(得分:2)

它应该意味着像你想的那样。您可以调用方法而不是分配其结果,因为有时您不需要结果。

答案 2 :(得分:2)

你是对的,这可能是一个错误。但是,Java编译器无法知道equalsIgnoreCase方法是一个“纯函数”,即没有副作用,除非你保留其返回值,否则没有任何意义。

答案 3 :(得分:1)

大多数编程语言都允许您忽略返回的方法代码。 有时你不关心返回的值,在这种情况下你应该被允许。