悄悄提问

nyzlhao 2008-11-24 10:18:27
public class ReturnTest{
public static int returnM(int a,int b){
System.out.println(a+b);
return a+b;
}
public static void main(String[] args){
int a=3;
int b=5;
System.out.println("练习的结果是:"+returnM(a,b));
}
}
为什么是这样输出结果
8
练习的结果是:8
练习的结果是:应该先输出
...全文
216 17 打赏 收藏 举报
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
「已注销」 2008-11-25
sf
  • 打赏
  • 举报
回复
dvj151613261 2008-11-25
a,b 相当于静态变量。
  • 打赏
  • 举报
回复
FriendQ 2008-11-25
public class ReturnTest{
public static int returnM(int a,int b){
System.out.println(a+b);
return (++a)+(++b); //这改下看看
}
public static void main(String[] args){
int a=3;
int b=5;
System.out.println("练习的结果是:"+returnM(a,b));
}
}
8
练习的结果是:10
  • 打赏
  • 举报
回复
nyzlhao 2008-11-25
[Quote=引用 12 楼 bigbro001 的回复:]
简单的说就是,println()方法要等待其括号中的argument("练习的结果是:"+returnM(a,b))做完evaluation,得到一个东西以后才把他的值拷贝给println()方法的参数,然后执行println()方法,因此returnM()方法是先执行的
[/Quote]
楼上说的更容易说通
  • 打赏
  • 举报
回复
bigbro001 2008-11-25
简单的说就是,println()方法要等待其括号中的argument("练习的结果是:"+returnM(a,b))做完evaluation,得到一个东西以后才把他的值拷贝给println()方法的参数,然后执行println()方法,因此returnM()方法是先执行的
  • 打赏
  • 举报
回复
myjava_024 2008-11-25
[Quote=引用 3 楼 gejixin 的回复:]
调试一下,看到应该是这样,"练习的结果是:"+returnM(a,b)),System.out.println并不是立即输出,而是放在一个缓冲区里,这样在调用是,先把"练习的结果是:"+returnM(a,b)),这条语句放在了缓冲了,在放在缓冲里之前,returnM(a,b))已经执行了,
所以先输出8,然后才是清空system.out.println输出缓冲里的内容,最后输出练习的结果是:8
[/Quote]
支持
  • 打赏
  • 举报
回复
nyzlhao 2008-11-25
3楼说的我看看
  • 打赏
  • 举报
回复
loaferwang 2008-11-25
对于这样的问题,用debug工具来说明,再好不过啦,用next step的操作,可以搞定的呀!可以试一下啦!
  • 打赏
  • 举报
回复
nyzlhao 2008-11-25
我看了println()函数,最终是转换成print()函数,只是后面加了newLine()
我认为他首先用到的是这个方法:

public void print(Object obj) {
write(String.valueOf(obj));
}

然后是这个

private void write(String s) {
try {
synchronized (this) {
ensureOpen();
textOut.write(s);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush && (s.indexOf('\n') >= 0))
out.flush();
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}

但是上面这玩意没有弄懂
而在执行public void print(Object obj)方法的时候已经执行了System.out.println(a+b)语句
个人觉得print()里面的参数都要完全转换成字符串才输出
这也是我刚刚看的,不知道是不是这样来理解的
  • 打赏
  • 举报
回复
ouyangxiaokang6 2008-11-25
先调用函数,输出8
然后回主函数再输出
  • 打赏
  • 举报
回复
不善^ 2008-11-24
顺序问题
先System.out.println(a+b);
因为 函数调用 了
  • 打赏
  • 举报
回复
gmh521 2008-11-24
先调用public static int returnM(int a,int b)方法,

执行到这布:System.out.println(a+b); a+b 值是8

然后returen a+b的值8,就是函数值

最后执行System.out.println("练习的结果是:"+returnM(a,b)); 输出练习的结果是:8
基本功有待提高!!
  • 打赏
  • 举报
回复
jhr924 2008-11-24
应该就是3楼说的那样,
但是是不是放在缓冲区里我就不知道了,内在的原理不是很明白
  • 打赏
  • 举报
回复
shenjie1989 2008-11-24
先调用public static int returnM(int a,int b)方法,

执行到这布:System.out.println(a+b); a+b 值是8

然后returen a+b的值8,就是函数值

最后执行System.out.println("练习的结果是:"+returnM(a,b)); 输出练习的结果是:8
  • 打赏
  • 举报
回复
gejixin 2008-11-24
调试一下,看到应该是这样,"练习的结果是:"+returnM(a,b)),System.out.println并不是立即输出,而是放在一个缓冲区里,这样在调用是,先把"练习的结果是:"+returnM(a,b)),这条语句放在了缓冲了,在放在缓冲里之前,returnM(a,b))已经执行了,
所以先输出8,然后才是清空system.out.println输出缓冲里的内容,最后输出练习的结果是:8
  • 打赏
  • 举报
回复
Successman2013 2008-11-24

结果是8,没有错呀,关键看你怎么理解!
我给你改了一下,你再看看就懂了,

public class ReturnTest{
public static int returnM(int a,int b){
System.out.println(a+b);
return a+b;
}
public static void main(String[] args){
int a=3;
int b=5;
returnM test=new returnM();
System.out.println("练习的结果是:"+test.returnM(a,b));
}
}
  • 打赏
  • 举报
回复
renmms 2008-11-24
先调用public static int returnM(int a,int b)方法,

执行到这布:System.out.println(a+b); a+b 值是8

然后returen a+b的值8,就是函数值

最后执行System.out.println("练习的结果是:"+returnM(a,b)); 输出练习的结果是:8
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2008-11-24 10:18
社区公告
暂无公告