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
- та же история с Вейл ()!