Java дает мне разные результаты для одного и того же процесса

То, что я в основном хочу знать, это: в строке 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 ответа

Я думаю, что вам нужно прочитать о передаче по значению и ссылки в 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 указывают на другую ссылку и не влияют на первоначальное значение. Надеюсь, что это проясняет!

Java всегда передает аргументы по значению, а не по ссылке (не только примитивные типы, но и ссылочные типы). Вот почему ваш vale(int x) метод не работает.

Посмотрите на эту статью, она объясняет все: http://www.javaworld.com/article/2077424/learn-java/does-java-pass-by-reference-or-pass-by-value.html

  • Ваш метод val(int[] x) абсолютно ничего не выполняет в этом коде. Он возвращает void (ничто) в функцию 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
  • та же история с Вейл ()!
Другие вопросы по тегам