11 回答
TA贡献109条经验 获得超149个赞
这是变量作用域的问题,方法中的变量属于局部变量,当方法调用开始,方法中的局部变量会在栈内存中被创建,当方法调用结束后,该方法在栈内存中的局部变量就会被回收销毁!这些变量的作用范围仅限于方法中,那么对main方法里面的变量没有任何影响,修改方法是在main方法中,用一个变量来接收调用方法所产生的结果!
TA贡献2条经验 获得超6个赞
Java中,基本类型(int,float,char等)是按值传递,在 fun(int a, int b, int c) 中,可以理解为fun中的c是main中的c的一个复制,产生复制后对其中一个c操作,不会影响到另一个c。(可以试着在fun内部打印c,结果应当是期望的6)
可以说没有什么科学的原因,Java(以及Java的祖先C++和C)就是这么设计的,设计者希望你用“传进去的是参数,不是结果”的思考方式来想问题,这样的设计防止在方法内部的操作,在不经意间影响到方法外部程序运行结果的可能。在做更复杂的程序时,这种方式更易于思考,不易出错。
在Java中,“某个方法产生的结果”,用方法返回值的方式传递,例如
public static int fun (int a, int b) {
c = a * b;
return c;
}
public static void main (String[] args[]) {
int c = fun(2, 3);
System.out.println(c);
}
如果要返回多个结果,可以返回数组,容器,或者自定义类。
TA贡献1条经验 获得超1个赞
我觉得 都只说对了一半,那个 悟00 同学说对了 一大半。
你的fun方法是static。静态的。
你去做个很简单的实验就知道了,int c 变成 static int c;
你再试试。
然后去看静态方法和静态变量在内存中的存放和使用,就知道了。
TA贡献15条经验 获得超3个赞
因为fun函数的参数C的作用域就是在函数fun内,而main函数中的变量c的作用域也是在main内,将c变量的值传给fun的形参c后,就没有关系了。所以打印的c变量的值还是0,除非你返回函数的计算结果。
return c=a*b;
TA贡献377条经验 获得超508个赞
你好:
可以这样得到你想要的结果:
public static int fun(int a,int b,int c) { c = a * b; return c; } public static void main(String[] args) { int c = 0; c = fun(2,3,c); System.out.println(c); }
通过调用这个方法将 c 改变后再返回,然后这边接收就可以了。
望采纳!
TA贡献1123条经验 获得超629个赞
基本数据类型作为方法参数的时候是复制到方法里执行的,所以不会改变方法外的值
fun方法里的c只是复制了main方法里的变量c,所以不会改变main方法里的变量c
TA贡献188条经验 获得超91个赞
很简单的问题,你稍微调试一下就会知道, System.out.println(c)打印的是C的值,C=0,而不是fun(),就算执行了fun(), 这里int c = 0; fun(2,3,c),传过去的C也是等于0;
TA贡献89条经验 获得超59个赞
c其实是不需要传的 public static int fun(int a,int b) { int c = a * b; return c; } public static void main(String[] args) { int c = 0; c = fun(2,3); System.out.println(c); }
添加回答
举报