系统粉 > 电脑问答 > 其他问答

已解决看书上例子时的疑问(Java)

提问者:丢丢爆可耐  |  浏览次  |  提问时间:2017-01-26  |  回答数量:8

看书上例子时的疑问(Java) 这是我在书上看到的一个例题: class People { int money; void setMoney(int n){ money=n;} } class A { void f(double y,People p){ y=y+1; p.setMoney(100); System.out.println(\"参数y的值是:\"+y); System.out.println(\"参数对象p的money是:\"+p.money); } } public class Example { public static void main(String args[]){ double y=0.8; People zhang=new People(); zhang.setMoney(8888); A a=new A(); System.out.println(\"在方法f被调用之前对象zhang的money是:\"+zhang.money+\"y的值是:\"+y); a.f(y,zhang); System.out.println(\"在方法f被调用之后main方法中y的值仍然是:\"+y);

已有8条答案
weal_smile

weal_smile

回答数:176  |  被采纳数:124

void f(double y,People p)是按值传递,在函数里改了对外面没用,改成void f(double &y,People &p)
要看程序如何执行可以单步调试
2017-01-27 00:17:02
赞 17
___杨兴杰丶

___杨兴杰丶

回答数:93  |  被采纳数:141

1)答:
因为输出语句
System.out.println("在方法f被调用之前对象zhang的money是:"+zhang.money+"y的值是:"+y);
里面的变量y,编译器内部会首先查找局部变量的y值(也就是在main方法中y定义的值),
如果没找到局部变量,此时才会去找整个class文件的全局变量

特别注意void f(double y,People p)方法中的y和输出语句
System.out.println("在方法f被调用之前对象zhang的money是:"+zhang.money+"y的值是:"+y)中的y
根本就没有一点联系,完全是独立的
2017-01-27 04:21:42
赞 9
时易子

时易子

回答数:113  |  被采纳数:79

neo_pang 你说的我明白了,但你还没帮我解释我的第二个疑问:
为什么这两个输出语句:
System.out.println("参数y的值是:"+y);
System.out.println("参数对象p的money是:"+p.money);
不是最后输出,而是在System.out.println("在方法f被调用之后main方法中y的值仍然是:"+y); 和System.out,println("在方法f被调用之后main方法中对象zhang的money是:"+zhang.money); 这两个语句前输出?难道不是先执行a. f(y, zhang);及下面的输出语句后再返回执行方法f 中的输出语句吗?
2017-01-27 05:36:32
赞 11
我晕199494

我晕199494

回答数:126  |  被采纳数:43

我的编译器是先执行

System.out.println("参数y的值是:"+y);
System.out.println("参数对象p的money是:"+p.money);

后执行

System.out.println("在方法f被调用之后main方法中y的值仍然是:"+y);
System.out,println("在方法f被调用之后main方法中对象zhang的money是:"+zhang.money);
2017-01-27 05:40:56
赞 12
309659952

309659952

回答数:107  |  被采纳数:100

回4楼:对!编译器是这样执行的,我的问题是:为什么是这样执行?为什么不是直接执行下去然后再返回执行前2个输出语句?
2017-01-27 05:22:57
赞 10
wo250074141

wo250074141

回答数:59  |  被采纳数:64

因为这两句
System.out.println("参数y的值是:"+y);
System.out.println("参数对象p的money是:"+p.money);
是在f函数里的,是函数方法的一部分。

而这句话a.f(y,zhang);
是调用f函数方法的,只有这个方法全部执行完毕了 才会执行
a.f(y,zhang); 后面的
2017-01-27 01:08:14
赞 5
zmc007007

zmc007007

回答数:52  |  被采纳数:85

那要用到异步和多线程技术
2017-01-27 16:49:05
赞 5
勤奋的yzy

勤奋的yzy

回答数:203  |  被采纳数:125

哦 我现在学的还比较浅
不过看了neo_pang 的说法 明白了点
2017-01-27 08:12:00
赞 20
相关问答
最新其他问答
解决方法