【问题标题】:Java is giving me different results for the same processJava 在同一个过程中给了我不同的结果
【发布时间】:2017-02-24 17:06:26
【问题描述】:

我主要想知道的是: 在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;
}

【问题讨论】:

标签: java arrays methods


【解决方案1】:

Java 总是通过值传递参数,而不是通过引用(不仅是原始类型,引用类型也是如此)。这就是为什么您的 vale(int x) 方法不起作用的原因。

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

【讨论】:

    【解决方案2】:

    我认为您需要阅读 Java 中的按值传递和引用。关于您的问题,val(i)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 的值指向不同的引用并且不会影响原始值。希望这可以澄清!

    【讨论】:

      【解决方案3】:
      • 您的方法 val(int[] x) 在这段代码中完全没有任何作用。它将 void(nothing) 返回给 main() 函数,并且您在 val() 中使用数组 x 执行的操作是在 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;
      }
      

      主要:

      int[] i={25,22};
      
      i = val(i); // creates an array with every element doubled and assigns it to i
      
      • 与 vale() 相同!

      【讨论】:

        猜你喜欢
        • 2017-10-05
        • 2022-12-03
        • 2017-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多