Java为同一个流程提供了不同的结果

时间:2017-02-24 17:06:26

标签: java arrays methods

我最想知道的是: 在public static void val(int[] x)(int[] x)做什么? 另外:当我问

时,为什么我会得到最终的累加值
for(int y:i){
    System.out.println(y);
}

但不适用于:

int y=2+i2;
    System.out.println(y);

为什么vale()方法不能转换" i2"值" x"立即然后使用" x"继续编译。后续' i2"的价值计算....对不起,如果我的问题含糊不清......我只是不知道怎么回事....感谢

完整代码:

public static void main(String[] args) {

    int[] i = { 25, 22 };
    int i2 = 41;
    val(i);
    for (int y : i) {
        System.out.println(y);
    }
    vale(i2);
    int y = 2 + i2;
    System.out.println(y);

}

public static void val(int[] x) {
    for (int c = 0; c < x.length; c++) {
        x[c] *= 2;
    }

}

public static void vale(int x) {
    x += 23;
}

3 个答案:

答案 0 :(得分:0)

Java总是按值传递参数,而不是通过引用传递参数(不仅是基本类型,引用类型)。这就是您的vale(int x)方法无效的原因。

看看这篇文章,它解释了所有内容:http://www.javaworld.com/article/2077424/learn-java/does-java-pass-by-reference-or-pass-by-value.html

答案 1 :(得分:0)

我认为您需要阅读Java中的值传递和引用。关于您的问题,val(i)&amp; vale(i2)在技术上是按价值传递的。由于数组是对象类型,因此在val(i)的情况下将其引用传递给方法,因此在打印引用时可以看到修改。但是,vale(i2)采用原始整数类型作为参数,因此方法中的修改不会影响原始值。为了更好地理解这一点,您可以按如下方式修改val(int [] x)方法:

    public static void val(int[] x) {
        x = new int[] {35, 57};
        for (int c = 0; c < x.length; c++) {
            x[c] *= 2;
        }
    }

我刚添加了x = new int[] {35, 57};,这会使x的值指向不同的引用,而不会影响原始值。希望这澄清一下!

答案 2 :(得分:-1)

  • 你的方法val(int [] x)在这段代码中完全没有任何结果。它将void(无)返回到main()函数,并且使用数组x在val()内执行的操作在x ...的副本上完成...

可能的解决方法:

public static int[] val(int[] x){
int[] newarr = new int[x.length]; 
for (int c=0; c<x.length;c++){
    newarr[c] = x[c]*2;
}
return newarr;
}

在main中:

int[] i={25,22};

i = val(i); // creates an array with every element doubled and assigns it to i
  • 与vale相同的故事()!