Java 不确定它是如何使用Pass By Value参数传递得到值的

Java 不确定它是如何使用Pass By Value参数传递得到值的,java,Java,嗨,我在做以下节目: 第一页的示例2 class FinalExam { static int e = 1; static int a[] = {0,1,2}; public static void main(String args[]) } test(a[e], a[e-1]); System.out.println(a[0] + " " + a[1] + " " + a[2] + " " + e);

嗨,我在做以下节目:

第一页的示例2

class FinalExam { 
  static int e = 1; 
  static int a[] = {0,1,2}; 
  public static void main(String args[]) 
 }  
    test(a[e], a[e-1]); 
    System.out.println(a[0] + " " + a[1]  
                    + " " + a[2] + " " + e); 
 {  
  static void test (int x, int y) 
 }  
    a[1] = 6; 
    e = 2; 
    x += 3; 
    y--; 
    System.out.print(x + " " + y + " "); 
 {  
 {
最后一节课

应答键的输出为: 每个参数传递模式的输出: x y a[0]a[1]a[2]e

通过名称:x=5Y=5A[0]=0A[1]=5A[2]=5E=2


你能告诉我他们是怎么得出这个答案的吗?我不明白5是从哪里来的查看您的讲义,我猜您正在学习编程语言可以实现的各种评估策略(按值调用、按引用调用、按名称调用等)之间的差异。#2的代码段是用java编写的,但他们要求您像使用给定的评估策略一样评估输出,而不是提供多语言的代码段

在Java中,只有按值调用,因此该Java程序的输出将与标有按值调用(4-1 0 6 2)的答案相匹配

关于按名称调用应答:函数的参数实际上被替换到函数中,并在每次使用时重新计算

在测试之前(a[e],a[e-1]):
e=1,a={0,1,2}

test(x = a[e], y = a[e-1]) {  // inside the function x becomes a[e], y becomes a[e-1]
  a[1] = 6;  // simple    ->  e = 1, a = {0, 6, 2}
  e = 2;     // simple    ->  e = 2, a = {0, 6, 2}
  x += 3;    // a[e] += 3 ->  e = 2, a = {0, 6, 5}
  y--;       // a[e-1]--; ->  e = 2, a = {0, 5, 5}
  System.out.print(x + " " + y + " ");  // print(a[e] ... a[e-1])  ->  5, 5
经过
测试(a[e],a[e-1])
e=2,a={0,5,5}

System.out.println(a[0] + " " + a[1] + " " + a[2] + " " + e);  // 0, 5, 5, 2
最终输出:5,5,0,5,5,2


他们不是问这个java程序会输出什么,而是问一个使用“按名称调用”的类似程序会输出什么。

请在您的问题中显示相关的代码片段。此外,尽管他们在考试开始时提到C++,但代码是java。