首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么打印5 7 8 11 19?

为什么打印5 7 8 11 19?
EN

Stack Overflow用户
提问于 2020-01-17 11:27:16
回答 2查看 39关注 0票数 0
代码语言:javascript
复制
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 + " ");


}

这让我感到困惑;神秘不是空虚的吗?它不应该更新任何值5 7 8 11 19

EN

回答 2

Stack Overflow用户

发布于 2020-01-17 11:34:25

在调试器模式下运行它,这样您自己就可以看到为什么它会像这样打印。https://help.eclipse.org/2019-12/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-debug-launch.htm

票数 0
EN

Stack Overflow用户

发布于 2020-01-17 12:11:53

要解释发生了什么,理解Java的参数传递是很重要的;尤其是whether it's “pass-by-reference” or “pass-by-value”

首先,定义术语"pass-by-value“语义和"pass-by-reference”是谨慎的:

  • Pass-by-value:完全计算实际参数(或实参表达式),并将结果值复制到方法/函数执行期间用于保存形参的值的位置。该位置通常是应用程序运行时堆栈上的一块内存(这是Java处理它的方式),但其他语言可以选择参数存储differently.
  • Pass-by-reference:形式参数只是充当实际参数的别名。只要方法/函数使用形参(用于读取或写入),它实际上就是在使用实际参数。

Java是严格按值传递的,与C语言完全一样。请参阅Java语言规范(JLS)中的以下引用:

当调用方法或构造函数时(§15.12),在执行方法或构造函数的主体之前,实际参数表达式的值会初始化新创建的参数变量(每个声明的类型)。出现在FormalParameter中的标识符可以用作方法或构造函数主体中的简单名称,以引用形参。

https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.4.1

现在计算参数表达式(可能如上所述重写)以生成参数值。每个参数值恰好对应于该方法的n个形参中的一个。

https://docs.oracle.com/javase/specs/jls/se11/html/jls-15.html#jls-15.12.4.2

与所有Java对象一样,数组是通过值传递的。但是,该值是对数组的引用。因此,当你在被调用的方法中给数组的一个单元格赋值时,你将赋值给调用者所看到的相同的数组对象。

在您共享的代码片段中:

代码语言:javascript
复制
public static void main(String[] args)
{
    int[] values = {5,2,1,3,8};

    mystery(values); // this call will pass the reference by value

    for(int v : values)
        System.out.println(v + " ");


}

mystery(values)将通过值传递对数组values的引用,接收方mystery(int[] data)的操作将修改该引用指向的数组values

由于void是一种类型化语言,因此它是一种返回类型,表示期望从mystery(int[] data)返回的结果的类型。

你可以在here上阅读更多关于它的内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59780780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档