我非常愚蠢地怀疑为什么我们在方法中使用return语句。如果不在方法中使用return语句,我们也可以获得所需的值 例如
package testing;
public class ReturnMethod {
static int a = 10;
static int b = 5;
static int c;
static int d;
public static void add() {
c = a + b;
}
public static int returnAddValue() {
d = a + b;
return d;
}
public static void main(String[] args) {
add();
System.out.println("c: " + c);
int value = returnAddValue();
System.out.println("value: " + value);
}
}
在以上两个例子中我得到了输出
c: 15
value: 15
所以我怀疑何时使用return语句以及为什么需要
答案 0 :(得分:2)
使用return statement
,return value
无需保存在任何全局,外部或成员变量中。
但是,如果没有return statement
,您必须准备一些outer
变量值来跟踪它。
答案 1 :(得分:1)
如果将方法的结果分配给静态变量(实际上,通过设置静态变量传入方法的"参数"),当两个方法调用该方法时,您会遇到问题并发线程,因为变量是为方法的所有调用共享的:
Thread t1 = new Thread(() -> {a = 1; b = 2; add(); }); t1.start();
Thread t2 = new Thread(() -> {a = 3; b = 4; add(); }); t2.start();
t1.join(); t2.join();
您不知道哪些线程首先运行,或者即使它们同时运行;因此,当您致电a
时,您不知道b
或add()
的价值,也不知道之后c
中的值是否为第一个或第二个线程(或两者的混合)中的调用结果。
之后存储在c
中的值可以是3
,5
或7
中的任何一个(或任何其他值,如果有另一个的话题>同时在此代码之外同时调用add()
。
如果通过将a
和b
作为方法参数传递,并将结果作为返回值接收,则将值保持在堆栈中,这样线程干扰问题就会完全消失。
即使您的代码是单线程的,只需写一下它就是丑陋的:
a = 1;
b = 2;
add();
int result = c;
而不是
int result = add(1, 2);
答案 2 :(得分:0)
当您需要返回值的方法时,应该使用return语句。
在您的情况下,两种方法都有效 但是当你不希望你的班级的某个领域被另一个班级改变时,你可以,并且应该使用返回的方法。
例如,当您创建与银行帐户相关的软件时,您希望money
仅看到,而不是已更改。因此,您将money
设为私有,并制作一个返还资金的方法。通过这种方式,其他类只能看钱,但不能更改。
答案 3 :(得分:0)
首先,您的功能不同,如您所见
public static **void** add()
public static **int** returnAddValue()
第一个不返回任何内容,因为它返回类型为void,第二个返回类型为int。 第一个起作用,因为c是一个全局变量。
答案 4 :(得分:0)
如果不将结果存储在类的(静态)变量中,通常会使用return。
public class ReturnMethod {
static int a = 10;
static int b = 5;
public static void add() {
int c = a + b;
}
public static int returnAddValue() {
int d = a + b;
return d;
}
public static void main(String[] args) {
add();
//not possible to access c here
//System.out.println("c: " + c);
int value = returnAddValue();
System.out.println("value: " + value);
}
}
在该修改示例中,您无法访问add()方法的结果。
您应该阅读Scopes in Java。
答案 5 :(得分:0)
你有一个类变量c& d。这些变量与类关联并存储在堆中。如果为其分配一个值,则可以在没有显式return语句的情况下访问它。但是如果你在方法中声明了d,则需要使用return语句将值返回给调用者。
答案 6 :(得分:0)
您能够访问类变量c的值的原因是它已初始化为静态。如果不是这种情况,只要add方法结束,c变量中的信息就会丢失。方法具有返回值的原因是,如果对象数据中存在任何操作,则用户可以获取更新的值。在这种情况下,如果对数据进行一系列操作,则会出现非常小的情况。在这种情况下,最终值必须返回给调用对象,不能返回语句。
答案 7 :(得分:0)
您的代码片段中的变量C始终在类中被访问,并将一直存在,直到该类的对象存在。因此,您可以在方法外打印变量C的值。
但是,如果您在方法add()
中声明了局部变量,则print语句System.out.println("c: " + c);
将打印变量c
的默认值。在这种情况下,这是零。
答案 8 :(得分:0)
它完全取决于我们的要求是从我们的方法返回值还是更新实例变量。有时我们只想处理一个值并返回结果,结果将以不同的方式使用,在这种情况下,我们需要从方法返回值。
例如
java.lang.Math.sqrt(double a)方法返回一个值,我们根据需要或要求使用返回值。你能想到如果这个方法没有返回任何值,那么它应该更新的内容,我认为如果它没有返回任何值,这个方法就没用了。