猿问

Java小题,请解答,谢谢


public static void fun(int a,int b,int c) {

    c = a * b;

}

public static void main(String[] args) {

    int c = 0;

    fun(2,3,c);

    System.out.println(c);

}

请问,调用了方法fun();不是c=a*b=2*3=6?为什么c还是等于0???

山水郎2015
浏览 2463回答 11
11回答

冰山点水

这是变量作用域的问题,方法中的变量属于局部变量,当方法调用开始,方法中的局部变量会在栈内存中被创建,当方法调用结束后,该方法在栈内存中的局部变量就会被回收销毁!这些变量的作用范围仅限于方法中,那么对main方法里面的变量没有任何影响,修改方法是在main方法中,用一个变量来接收调用方法所产生的结果!

changrui0608

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);}如果要返回多个结果,可以返回数组,容器,或者自定义类。

扣子飞飞

我觉得 都只说对了一半,那个 悟00 同学说对了 一大半。你的fun方法是static。静态的。你去做个很简单的实验就知道了,int c 变成 static  int c;你再试试。然后去看静态方法和静态变量在内存中的存放和使用,就知道了。

冲啊

因为fun函数的参数C的作用域就是在函数fun内,而main函数中的变量c的作用域也是在main内,将c变量的值传给fun的形参c后,就没有关系了。所以打印的c变量的值还是0,除非你返回函数的计算结果。return c=a*b;

慕莱坞9220042

你好:可以这样得到你想要的结果: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 改变后再返回,然后这边接收就可以了。望采纳!

Caballarii

基本数据类型作为方法参数的时候是复制到方法里执行的,所以不会改变方法外的值fun方法里的c只是复制了main方法里的变量c,所以不会改变main方法里的变量c

攻城头狮

如果c是全局变量你这样可以 ,局部变量你得在fun里面return c 

Mangues

c是基本变量,传入方法中是值的copy,方法中计算的是copy的值,c变量是没有改变的

观自在

java的方法是值传递 不是地址传递  如果是C或C++ 用指针才能实现这个功能

qyy2499760117_叶子

很简单的问题,你稍微调试一下就会知道, System.out.println(c)打印的是C的值,C=0,而不是fun(),就算执行了fun(), 这里int c = 0;   fun(2,3,c),传过去的C也是等于0;
随时随地看视频慕课网APP

相关分类

Java
我要回答