我有以下两个代码,并且在知道SOP中的一元操作是如何工作的过程中,以及主要方法。有人能让我知道“i”的值是如何在main中计算的,也是在静态方法中得到的。
任何细节背景操作都将受到赞赏,因为我需要构建一个逻辑,这将帮助我理解其他相关代码。
提前感谢您的帮助。
class R
{
static int test( int i)
{
return i--;
}
public static void main (String[] args)
{
int i=0;
System.out.println(test(i++));
System.out.println(i);
i = 0;
System.out.println(test(i--));
System.out.println(test(i));
}
}
结果:
0
1
0
-1
第二个:
class S
{
static int test( int i)
{
return ++i;
}
public static void main (String[] args)
{
int i=0;
System.out.println(test(i++));
System.out.println(i);
i = 0;
System.out.println(test(i--));
System.out.println(test(i));
}
}
结果:
1
1
1
0
答案 0 :(得分:1)
理解程序行为的关键是要记住,对于原始类型,Java使用按值调用而不是按引用调用。< / p>
因此,i
函数中的名称test
将不会引用i
函数中名称main
引用的相同值。
public static void main (String[] args) {
int i=0;
System.out.println(test(i++));
这里发生的事情是:
我的值增加了i++
到1
接下来使用旧值i调用test
方法,因此test (0)
test (0)
的返回值将打印到标准输出。
要确定test (0)
的返回值,请仔细查看test
方法:
static int test( int i) {
return i--;
}
这里发生的是:
名称i
引用的传递值减少了i--
返回i的旧值
在0
传递的值中,返回值为0
,这是由以下内容打印的值:
System.out.println(test(i++));
在你的主要方法中。下一行:
System.out.println(i);
将main中的值i
打印到stdout。当i
的值的副本传递给test
方法时,旧值仍然保持不变。因此,数字1
将打印到标准输出。
通过示例演示了如何使用相同的模式跟踪代码的前两个结果的程序流程,您应该能够自己解释其他结果。
答案 1 :(得分:0)
“R”类中的“test”功能毫无意义: 它总是返回用于调用函数的值。 (由于后减量和按值调用)