Java 为什么会打印5781119? 公共静态无效神秘(int[]数据) { 对于(int k=0;k
这让我困惑;神秘不是空虚吗?它不应该更新任何值 5. 7. 8. 11Java 为什么会打印5781119? 公共静态无效神秘(int[]数据) { 对于(int k=0;k,java,Java,这让我困惑;神秘不是空虚吗?它不应该更新任何值 5. 7. 8. 11 19在调试器模式下运行它,这样您就可以了解它为什么会这样打印。 为了解释发生了什么,理解Java的参数传递非常重要;尤其是 首先定义术语“按值传递”“语义和“按引用传递””是谨慎的: 传递值:完全计算实际参数(或参数表达式),并将结果值复制到用于在方法/函数执行期间保存形式参数值的位置。该位置通常是应用程序运行时堆栈上的一块内存(这是Java处理它的方式),但其他语言可能会选择不同的参数存储 按引用传递:形式参数仅作为实际
19在调试器模式下运行它,这样您就可以了解它为什么会这样打印。
为了解释发生了什么,理解Java的参数传递非常重要;尤其是 首先定义术语“按值传递”“语义和“按引用传递””是谨慎的:
- 传递值:完全计算实际参数(或参数表达式),并将结果值复制到用于在方法/函数执行期间保存形式参数值的位置。该位置通常是应用程序运行时堆栈上的一块内存(这是Java处理它的方式),但其他语言可能会选择不同的参数存储
- 按引用传递:形式参数仅作为实际参数的别名。只要方法/函数使用形式参数(用于读取或写入),它实际上就是在使用实际参数
publicstaticvoidmain(字符串[]args)
{
int[]值={5,2,1,3,8};
神秘(值);//此调用将按值传递引用
for(int v:值)
System.out.println(v+“”);
}
神秘(值)
将通过值传递对数组的引用,接收器的操作神秘(int[]数据)
将修改该引用所指向的数组值
void
是一种返回类型,由于Java是一种类型化语言,它意味着神秘(int[]数据)
所期望的结果类型
您可以阅读更多关于它的内容Void是一种不返回任何内容的返回类型。data[k+1]=data[k]+data[k+1];Java是数组的按引用传递,数组实例将被更新。
public static void mystery(int[] data)
{
for (int k = 0; k < data.length - 1; k++)
data[k+1] = data[k] + data[k+1];
}
public static void main(String[] args)
{
int[] values = {5,2,1,3,8};
mystery(values);
for(int v : values)
System.out.println(v + " ");
}