Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助理解程序的执行情况吗_Java_Arrays_Methods_For Loop - Fatal编程技术网

Java 需要帮助理解程序的执行情况吗

Java 需要帮助理解程序的执行情况吗,java,arrays,methods,for-loop,Java,Arrays,Methods,For Loop,我正在复习一个练习题,我只想知道程序是如何得出大于21的答案的顺序 我很难理解主要的驾驶员呼叫。我了解这些方法的用法 代码是: public class Test { public static void main(String[] args) { int[] x = {1, 2, 3, 4, 5}; increase(x); int[] y = {1, 2, 3, 4, 5}; increase(y[0]); System.out.println(

我正在复习一个练习题,我只想知道程序是如何得出大于21的答案的顺序 我很难理解主要的驾驶员呼叫。我了解这些方法的用法

代码是:

public class Test {
  public static void main(String[] args) {
    int[] x = {1, 2, 3, 4, 5};
    increase(x);

    int[] y = {1, 2, 3, 4, 5};
    increase(y[0]);
    System.out.println(x[0] + " " + y[0]);
  }
  public static void increase(int[] x) {
    for (int i = 0; i < x.length; i++)
      x[i]++;
  }
  public static void increase(int y) {
     y++;
  }
}
公共类测试{
公共静态void main(字符串[]args){
int[]x={1,2,3,4,5};
增加(x);
int[]y={1,2,3,4,5};
增加(y[0]);
System.out.println(x[0]+“”+y[0]);
}
公共静态无效增加(int[]x){
对于(int i=0;i
对于原语,Java方法接收传入值的副本;对于对象类型,Java方法接收引用的副本
increase(int[])
接受数组(这是一种引用类型),并增加该数组中的每个值。该方法接收数组引用的副本,并且不会更改它。它只是增加数组中的每个元素,数组与您发送的数组相同

使用
increase(int)
会有点不同。
y
变量是传入值的副本。当您递增
y
时,您只是在递增该副本。原始值不变。因此,表面上看,您传入的值实际上没有更改


因此,输出将是
21

如果是原语,Java方法将接收传入值的副本,如果是对象类型,则接收引用的副本
increase(int[])
接受数组(这是一种引用类型),并增加该数组中的每个值。该方法接收数组引用的副本,并且不会更改它。它只是增加数组中的每个元素,数组与您发送的数组相同

使用
increase(int)
会有点不同。
y
变量是传入值的副本。当您递增
y
时,您只是在递增该副本。原始值不变。因此,表面上看,您传入的值实际上没有更改


因此,在增量(x)中,输出将是
21
,您传递的是数组的引用,因此增量实际上增加了实际值。在第二个实例中,传递数组的特定值并增加它并不会真正影响数组中保存的值。有关详细信息,在增量(x)中,传递数组的引用,因此增量实际上增加了实际值。在第二个实例中,传递数组的特定值并增加它并不会真正影响数组中保存的值。有关更多信息,

代码演示了(有效地)按引用调用(在第一种递增方法中)和按值调用(在第二种递增方法中)之间的区别。事实上,这两种方法都使用按值调用,但在第一种情况下,值是对对象(数组)的引用,在第二种情况下是
int
(数组中的单个值)

代码
int[]x={1,2,3,4,5}
创建一个数组。当您调用increase(x)时,您正在调用第一个increase方法。该方法遍历数组的元素并递增每个元素。行
x[i]++
相当于
x[i]=x[i]+1
。结果将存储回阵列。在这个调用结束时,数组现在包含
{2,3,4,5,6}
。因此
x[0]
2

在对
increase(int y)
的第二次调用中,我们不传入数组,而是传入
y[0]
(即
1
)的值。该方法增加变量
y
,但在方法之外没有效果。在Java中,当您传递一个变量时,它是通过值传递的,这本质上意味着传递了一个值的副本。对该值所做的任何更改都不会影响原始值

传入数组时,将传递对数组对象的引用。无法更改引用,但可以更改对象的内容(数组的内容)


我不得不承认这有点让人困惑,但是重新阅读我写的几遍,希望你能理解

代码演示了(有效地)按引用调用(在第一种递增方法中)和按值调用(在第二种递增方法中)之间的差异。事实上,这两种方法都使用按值调用,但在第一种情况下,值是对对象(数组)的引用,在第二种情况下是
int
(数组中的单个值)

代码
int[]x={1,2,3,4,5}
创建一个数组。当您调用increase(x)时,您正在调用第一个increase方法。该方法遍历数组的元素并递增每个元素。行
x[i]++
相当于
x[i]=x[i]+1
。结果将存储回阵列。在这个调用结束时,数组现在包含
{2,3,4,5,6}
。因此
x[0]
2

在对
increase(int y)
的第二次调用中,我们不传入数组,而是传入
y[0]
(即
1
)的值。该方法增加变量
y
,但在方法之外没有效果。在Java中,当您传递一个变量时,它是通过值传递的,这本质上意味着传递了一个值的副本。对该值所做的任何更改都不会影响原始值

传入数组时,将传递对数组对象的引用。无法更改引用,但可以更改对象的内容(数组的内容)


我不得不承认这有点让人困惑,但是重新阅读我写的几遍,希望你能理解

查看变量的范围和传递值。向我们解释