我最想知道的是:
在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;
}
答案 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)
可能的解决方法:
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