悄悄提问

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
练习的结果是:应该先输出
...全文
274 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 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

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧