【问题标题】:returning a value from a method to another method从一个方法返回一个值到另一个方法
【发布时间】:2015-03-19 21:03:52
【问题描述】:

谁能告诉我为什么返回的值是3而不是8。addFive方法中的return x语句不会改变main方法中x的值吗?

public class App {
    public static void main(String[] args) {
        int x=3;
        addFive(x);
        System.out.println("x = " + x);
    }

    private static int addFive(int x) {
        x += 5;
        return x;
    }
}

【问题讨论】:

  • 你应该看到这个相关的问题:stackoverflow.com/questions/40480/…
  • 我认为你真的应该接受下面列出的答案,无论如何我建议阅读 Arkanon 问题并完全掌握 java always-pass-by-value 的东西

标签: java


【解决方案1】:

您需要x=addFive(x); 而不仅仅是addFive(x)。单独调用addFive(x) 不会将返回值应用于任何变量。

【讨论】:

    【解决方案2】:

    您必须将返回的值设置为一个变量,否则它会丢失并且您在 main 方法中检索“x”的值。改为执行此操作以捕获返回值。

       public static void main(String[] args) {
           int x=3;
           x = addFive(x);
           System.out.println("x = " + x);
       }
    

    如果你只想查看返回值而不存储它,你甚至可以将函数调用放在System.out.println中。

       public static void main(String[] args) {
           int x=3;
           System.out.println("x = " + addFive(x));
    
       }
    

    【讨论】:

      【解决方案3】:

      就像其他人所说的那样,您需要分配您的返回值。因为您正在执行“addFive(x)”而不是“x=addFive(x);”您只是在 main 中打印“x”的实例,而没有获得函数返回的值。

      这是因为 main 函数中的“x”是一个实例变量,而 addFive() 中的“x”是一个局部变量。即使它们具有相同的名称,它们也不是同一个变量。 这可能会澄清一点 - http://www.tutorialspoint.com/java/java_variable_types.htm

      【讨论】:

        【解决方案4】:

        当你在java中调用一个方法并且你没有为任何变量赋值时,变化将发生在方法调用中,之后这个值将丢失并返回你分配的值。要查看结果,您应该这样做 System.out.println(addFive(x)); 但如果您想更改 x 的值,您必须分配 x = addFive(x);

        【讨论】:

          【解决方案5】:

          您正在使用x 调用方法addFive(int x),但没有将返回值分配给任何东西。所以,在main() 的范围内x 仍然像以前一样,3 - 这是正在打印的内容。因此,您可以将返回值存储到 x 本身:

          x = addFive(x);
          

          或在 print 语句中调用函数:

          System.out.println("x = " + addFive(x));
          

          【讨论】:

            【解决方案6】:

            该方法确实返回了一个值,但是您在返回时也必须将值设置为变量,否则它如何知道您要将值返回到哪个变量?您可以有 10 个变量,如果您只是调用该方法,它如何知道将数字返回到哪个变量?这就是为什么您必须将返回数字设置为这样的变量:

            x = addFive(x);
            

            【讨论】:

              【解决方案7】:

              因为您根本没有使用函数的计算。它不会改变 x 的值,它会返回新值。

              你应该这样做:

              int y = addFive(x);
              

              【讨论】:

                【解决方案8】:

                main函数中的值与addFive(int x )函数中的值完全不同。您将 x 从 main 发送到 addFive(int x) 方法。

                JVM 复制 x 并将其发送到 addFive(int x) 方法。然后x 更改addFive(int x) 方法。但是main() 方法中的x 保持不变。

                如果您想从 main 方法中获取 addFive(int x) 返回的更改值,您可以执行以下操作 -

                int returnedValueFromAddFive = addFive(x)  
                

                希望它会有所帮助。
                非常感谢。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-12-27
                  • 1970-01-01
                  • 2017-10-01
                  • 2013-04-30
                  • 1970-01-01
                  • 2019-03-02
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多