【问题标题】:What does return do when used inside an if statement?在 if 语句中使用 return 时有什么作用?
【发布时间】:2011-11-15 05:58:41
【问题描述】:

以下代码中 if 语句中的 return 有什么作用?

public void startElement(String namespaceURI, String localName,String qName, 
                                         Attributes atts) throws SAXException
{
    depth++;
    if (localName.equals("channel"))
    {
        currentstate = 0;
        return;
    }
    if (localName.equals("image"))
    {
        // record our feed data - you temporarily stored it in the item :)
        _feed.setTitle(_item.getTitle());
        _feed.setPubDate(_item.getPubDate());
    }
    if (localName.equals("item"))
    {
        // create a new item
        _item = new RSSItem();
        return;
    }
    if (localName.equals("title"))
    {
        currentstate = RSS_TITLE;
        return;
    }
    if (localName.equals("description"))
    {
        currentstate = RSS_DESCRIPTION;
        return;
    }
    if (localName.equals("link"))
    {
        currentstate = RSS_LINK;
        return;
    }
    if (localName.equals("category"))
    {
        currentstate = RSS_CATEGORY;
        return;
    }
    if (localName.equals("pubDate"))
    {
        currentstate = RSS_PUBDATE;
        return;
    }
    // if you don't explicitly handle the element, make sure you don't wind 
           // up erroneously storing a newline or other bogus data into one of our 
           // existing elements
    currentstate = 0;
}

它是把我们带出 if 语句并继续下一条语句,还是把我们带出方法 startElement?

【问题讨论】:

  • 好像这里的所有答案都是同时发布的,内容一样!

标签: java if-statement return


【解决方案1】:

上面代码中的返回值会带你跳出方法。

【讨论】:

  • 我还注意到它在执行 return 的行执行此操作。该行下的代码均未执行
【解决方案2】:

它完成了方法,所以它下面的代码不会被执行。

【讨论】:

    【解决方案3】:

    它是否将我们带出 if 语句并继续下一步 声明还是将我们带出方法 startElement?

    它会让你脱离方法.. return 语句终止函数的执行

    【讨论】:

      【解决方案4】:

      它将返回您在方法头中声明的内容(这里 void = nothing = 它只会结束方法)

      【讨论】:

        【解决方案5】:

        return 总是控制调用方法。

        【讨论】:

          【解决方案6】:

          这里的return可能是为了“提高”方法的性能,这样一旦执行了需要的场景,就不会执行其他比较。

          但是,在一个方法中有多个返回点并不是一个好习惯。

          正如我的 cmets 中所述,我会尝试不同的方法来实现相关代码的流程。

          【讨论】:

          • -1 谁说拥有多个返回点不是好习惯?没关系(只要没有太多
          • 互联网上有很多关于函数中的多个退出点的争论。然而,在我的小经验中,我在调试方法时遇到了很多问题,返回语句分散在它的流程中。在这种情况下,返回语句为 7 并定义了方法的流程。
          • 其实,你是对的......有太多的回报。如果您编辑您的答案,我将删除我的反对票(除非您编辑您的帖子,否则我无法删除它 - 只需添加一个句号或其他内容,任何更改都可以让我删除它,但我被锁定,直到您这样做)
          • 我想说大方法不应该有多个返回点。使用较小的方法更安全,因为它更容易快速了解必须在返回之前取消初始化的内容。
          【解决方案7】:

          是的。此处的返回将使方法失去控制。

          【讨论】:

            【解决方案8】:

            return 将结束方法的流程,在功能上与使用较短的else if 之类的链相同

            /* if (localName.equals("channel")) {
                currentstate = 0; // This can be removed because it's the default below.
            } else */ if (localName.equals("image")) {
                // record our feed data - you temporarily stored it in the item :)
                _feed.setTitle(_item.getTitle());
                _feed.setPubDate(_item.getPubDate());
            } else if (localName.equals("item")) {
                // create a new item
                _item = new RSSItem();
            } else if (localName.equals("title")) {
                currentstate = RSS_TITLE;
            } else if (localName.equals("description")) {
                currentstate = RSS_DESCRIPTION;
            } else if (localName.equals("link")) {
                currentstate = RSS_LINK;
            } else  if (localName.equals("category")) {
                currentstate = RSS_CATEGORY;
            } else if (localName.equals("pubDate")) {
                currentstate = RSS_PUBDATE;
            } else {
                currentstate = 0;
            }
            

            【讨论】:

              猜你喜欢
              • 2021-01-28
              • 1970-01-01
              • 2019-09-17
              • 2022-12-09
              • 1970-01-01
              • 2020-06-23
              • 1970-01-01
              • 2017-02-05
              • 1970-01-01
              相关资源
              最近更新 更多