更改方法从void返回到int仍然按值传递?

时间:2018-04-18 03:52:43

标签: java

我已经在这里提到了各种解释,关于传递值和Java中的引用传递。到目前为止,概念是基于原始数据类型,它通过值传递,并且引用和用户定义的数据类型通过引用传递。我还读到数组总是通过引用传递。但是,当我尝试执行以下程序时,为什么这两种方法的输出都不同?对象的位置称为引用。因此,如果我将值传递给demoByValue_,它应该返回9091?我在这里错过了什么?此外,它是否有助于开始摆弄C / C ++的第一个指针,以便获得这个想法的抽象画面,或者为初学者掌握这个概念可能是一个真实的类比?我确实研究了房屋地址的类比,如果这个人想要去特定的房子需要地址等等。但是,我想知道为什么我不理解这个概念?如何访问对原始数据类型值的引用以查看最新情况?

public class Misc {

    public static void main(String[] args) {

        int a = 91;
        System.out.println(a); //prints 91
        demoByValue(a);
        System.out.println(a); //prints 91
        a = demoByValue_(a);
        System.out.println(a); //prints 90 -- Why??
    }
    public static void demoByValue(int a){
        a = 90;
    }
    public static int demoByValue_(int a){
        a = 90;
        return a;
    }
}

1 个答案:

答案 0 :(得分:1)

在此计划流程之前,这是很正常的:

    int a = 91;
    System.out.println(a); //prints 91
    demoByValue(a);
    System.out.println(a); //prints 91
打印

91,因为值可以更改

  public static void demoByValue(int a){
    a = 90;
}

此函数demoByValue不会覆盖仅在参数中分配给局部变量的值并完成 但是这个

 public static int demoByValue_(int a){
    a = 90;
    return a;
}

在此处覆盖:a = demoByValue_(a);

相关问题