public class test {
public static void main(String[] args){
new test();
System.out.println(test.test1());
}
public static int test1(){
int x = 1;
try{
return x;
}
finally{
++x;
}
}
}
如果在++x下加入输入X的语句,发觉x是2,而且是在上面的输出之前去做,为啥返回的值是1呢?
finally块中的操作应该是在return之前执行的,所以返回的不应该是2么?
追答finally
中的代码是必须要执行的问题在于它的只是复制x的值,不能改变x本省,因此,对于基本类型的数据,在finally中改变return的值对返回值没有任何影响。简单点就是return是复制值返回,finally中无法改变return复制好的返回值,想一想,如果用引用,则可以有效改变
我的猜测与你类似,神奇的是,当我用断点去看,第二次到达return的时候,x显示的值是2,但是返回的确是1,这让我无法理解。
追答怎么说呢,不知道我发的那个链接你看了没,那上面也算说明白了一些 :“讨论到这里,我应该已经明白了,返回值和return是两码事,最终return还是最后执行,如果这个函数为void的话,那么我们就不用考虑返回值了。 return就是退出函数的意思了。”不知道能不能帮到你。
追问谢谢你啦,我会去仔细研究下。可惜没法追分给你~
c语言问题,运行程序段后输出1。
运行程序段后输出1。while(!x!=0) 等价于 while ( (!x) != 0),则 s初始化值为0,故有 !x = 1,接着 1 != 0 ,显然,结果为真。执行while后面的循环语句 s+=++x;(注意,++是前缀的),即 s = s+(++x)[ s= 0+ 1=1],完成后x=1,再次进入循环判断,根据上面的分析,...
...while(!x!=0)s+=++x;printf("%d",s) ;则( )为什么输出1啊_百度...
楼主可以分析一下语句while(!x!=0)s+=++x;循环的条件是!x!=0,非x不等于零,这个X的值只有0,能够满足。所以语句只有X=0时,才实现。接着进入内部循环,s+=++x,执行后s=1,x=1。x=1,时不满足!x!=0,跳出循环,打印s,程序结束。
为什么运行C#下段代码显示1?
也就是说默认是不区分大小写的
以下程序段执行后输出结果()。inti;for(i=1;;i++);printf(“%d”,i+...
是永远不会有输出的 首先for(i=1;;i++)是个无限循环,因为没有循环的判断条件 另外,再for(i=1;;i++);后面紧跟着一个分号,所以循环执行的是一个空语句,后面的printf是不在循环体内的
有谁知道这段代码的输出结果为什么是0\/0、0\/1、1\/0、1\/1
当然是这个结果。步骤:先进入循环i,i被初始化为0,判断i是否小于2,i小于2,执行循环j。进入循环j,j被初始化为0,判断j是否小于2,j小于2,输出i\/j,就是0\/0,j自加1,j为1。j为1,判断j是否小于2,j小于2,输出输出i\/j,就是0\/1,j自加1,j为2。j为2,判断j是否小于2,j等于2...
C语言的一道题:下面程序段的运行结果是:__ for (a=1,i=-1;-1<=i<1...
(-1<=i)<1 (1)这样的话,-1<=i为真,所以这个表达式的值为1,也就是说(1)这个表达式等价于(1<1)然后这个式子为假,所以不会进入该循环,所以i没有发生变化,也不会输出i,所以答案为-1 如果for循环写成这样:for (a=1,i=-1;-1<=i&&i<1;i++) 那么题主你的答案就对了。
C语言中!(-3)是为0还是为1,为什么
分析:第一次循环,输出x的值为1,接下来判断while后的条件 首先,看--x,该表达式的值是0,在C中,表示逻辑假,再取反,得逻辑真 第二次循环,输出x的值为-2,接下来判断while后的条件,--x,该表达式的值是-3,表示逻辑真,再取反,得到0,表示逻辑假,不成立 所以,输出结果为1 -2 ...
同一台计算机,同一个程序,同样的输入数据,为什么输出的结果不一样?
因为计算机每一瞬间运行加载的程序所运行的工作都不一样的,也就是同一台计算机状态是不断变化的,所以这次运行这段程序和下次运行这段程序的速度都有差异的,造成结果不一致 运算用的时间是肯定不同的,计算采用多任务机制,你的计算同一时间运行了多个进程,自然会使你的计算机每一时刻的运行的状态不一...
执行以下程序段后,输出的结果是inti,s=0;for(i=1;i<=10;i+){if(i%3!
你的程序有问题s=s+1这句,应该是s=s+i;这样的话,输出结果是 D 因为i变量for循环完后的值是11 又因为if(i%3!=0) continue;所以i%3==0时,也就是i可以被3整除时s=s+i,3+6+9=18,所以输出结果是D 11,18
以下程序段的输出结果是int x=3;
程序的输出结果是: 1 -2 第一次执行循环体: 输出1 此时x=x-2=3-2=1 判断条件 !(--x) 结果为 真 \/\/此时x再减1 变成 x=0 第二次执行循环体: 输出-2 此时x=x-2=0-2=-2 判断条件 !(--x) 结果为 假 \/\/ 此时x再减1 变成 x=-3 ...