为了账号安全,请及时绑定邮箱和手机立即绑定

Java小题,请解答,谢谢

Java小题,请解答,谢谢

山水郎2015 2016-06-12 09:39:32
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???
查看完整描述

11 回答

已采纳
?
冰山点水

TA贡献109条经验 获得超149个赞

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

查看完整回答
5 反对 回复 2016-06-12
?
changrui0608

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);

}

如果要返回多个结果,可以返回数组,容器,或者自定义类。

查看完整回答
5 反对 回复 2016-06-12
?
扣子飞飞

TA贡献1条经验 获得超1个赞

我觉得 都只说对了一半,那个 悟00 同学说对了 一大半。

你的fun方法是static。静态的。

你去做个很简单的实验就知道了,int c 变成 static  int c;

你再试试。

然后去看静态方法和静态变量在内存中的存放和使用,就知道了。

查看完整回答
1 反对 回复 2016-06-12
?
冲啊

TA贡献15条经验 获得超3个赞

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

return c=a*b;


查看完整回答
1 反对 回复 2016-06-12
?
慕莱坞9220042

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 改变后再返回,然后这边接收就可以了。

望采纳!

查看完整回答
1 反对 回复 2016-06-12
  • Wayaye
    Wayaye
    你这只是在表面上看似实现了想要的效果,但实际上产生的是三个c变量对象,fun里面的c是形参,换成什么符号都一样,跟main函数里面c没关系,main函数里面的定义的c和fun方法里面的c是同一个对象,fun函数左边的c和打印的c是同一个对象
  • 慕莱坞9220042
    慕莱坞9220042
    哦,知道了,谢了啊
?
Caballarii

TA贡献1123条经验 获得超629个赞

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

fun方法里的c只是复制了main方法里的变量c,所以不会改变main方法里的变量c

查看完整回答
1 反对 回复 2016-06-12
?
攻城头狮

TA贡献2条经验 获得超3个赞

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

查看完整回答
反对 回复 2016-06-13
?
Mangues

TA贡献5条经验 获得超0个赞

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

查看完整回答
反对 回复 2016-06-12
?
观自在

TA贡献14条经验 获得超2个赞

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

查看完整回答
反对 回复 2016-06-12
?
qyy2499760117_叶子

TA贡献188条经验 获得超91个赞

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


查看完整回答
反对 回复 2016-06-12
?
小城阿哥

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);
    }


查看完整回答
反对 回复 2016-06-12
  • 11 回答
  • 1 关注
  • 2432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信