从一个方法返回值到另一个方法

4

有人能告诉我为什么返回的值是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;
    }
}

你应该看到这个相关的问题:https://dev59.com/EXVD5IYBdhLWcg3wQJOT?rq=1 - Bobulous
我认为你应该从下面列出的答案中真正接受一个答案,无论如何,我建议阅读Arkanon的问题,并完全掌握Java始终按值传递的事情。 - niceman
8个回答

10

你希望使用 x=addFive(x); 而不只是 addFive(x)。仅调用 addFive(x) 不会将返回的值应用于任何变量。


5
你必须将返回值赋给一个变量,否则它会丢失,并在主方法中检索 "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);”,所以你只是打印了“x”的实例,而没有获得函数返回的值。
这是因为主函数中的“x”是一个实例变量,而在addFive()中的“x”是一个局部变量。即使它们具有相同的名称,它们也不是同一个变量。 这可能会澄清一点 - http://www.tutorialspoint.com/java/java_variable_types.htm

2

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


1
你正在调用方法addFive(int x)并使用参数x,但没有将返回值分配给任何变量。因此,在main()的作用域内,x仍然是原来的值3 - 这也是被打印出来的结果。所以,你可以将返回值存储到x本身中:
x = addFive(x);

或者在打印语句中调用该函数:
System.out.println("x = " + addFive(x));

1
该方法确实返回一个值,但是当你返回它时,你也必须将该值设置给一个变量,否则它怎么知道你想将该值返回到哪个变量中?你可以有10个变量,如果你只调用该方法,它怎么知道要将数字返回给哪个变量呢?这就是为什么你必须像这样将返回的数字设置为一个变量:
x = addFive(x);

0

因为你没有使用函数的计算。它不会改变x的值,而是返回新的值。

你应该这样做:

int y = addFive(x);

0

主函数中的值与addFive(int x)函数中的值完全不同。您从主函数向addFive(int x)方法发送一个x

JVM复制了x并将其发送到addFive(int x)方法。然后,xaddFive(int x)方法中发生变化。但是,在main()方法中的x保持不变。

如果您想从主函数获取addFive(int x)返回的更改后的值,则可以执行以下操作-

int returnedValueFromAddFive = addFive(x)  

希望能有所帮助。
非常感谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接