-3

我有以下两个代码,并且在了解一元操作在 SOP 和 main 方法中如何工作的过程中。有人可以让我知道“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
4

2 回答 2

1

理解程序行为的关键是记住对于原始类型,Java 使用按值调用而不是按引用调用

因此i,您的函数中的名称将不会引用您的函数中的名称test所引用的相同值。imain

举例

  public static void main (String[] args) {

  int i=0;
  System.out.println(test(i++));

这里发生的是:

  • i 的值增加i++为 1

  • 接下来test使用旧值 i 调用该方法,因此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到标准输出。作为传递给方法的值的副本,旧值仍然保持不变。因此该数字将被打印到标准输出。itest1

现在由你决定

通过示例展示了如何使用相同的模式跟踪代码的前两个结果的程序流,您应该能够自己解释其他结果。

于 2013-04-05T09:33:56.540 回答
0

“R”类中的函数“test”是没有意义的:它总是返回用于调用函数的值。(因为后期递减和按值调用)

于 2013-04-05T09:42:49.813 回答