Java 是对原语按值传递,对其他所有事物(包括数组)按引用(值)传递。
http://javadude.com/articles/passbyvalue.htm
这基本上意味着您的函数没有获得数组的副本,而是获得了数组本身。
用一个 int 试试(原来的值不会改变,因为它是一个原始值)。
public static void main(String[] args) {
int ray[]={3,4,5,6,7};
改变(射线);
for(int y: ray){
System.out.println(y);
}
}
public static void change(int i){
i = i + 10;
}
public static void change(int x[]){
for(int counter = 0; counter < x.length;counter++){
x[counter]+=5;
}
}
有些人会说 Java 总是按值传递,但这是因为在引用方面选择不当。
从概念上讲,对象是通过引用传递的,而基元是通过值传递的。你可以随便叫它,但它看起来像鸭子,走路像鸭子,叫起来像鸭子。
试试这个,你会得到更好的主意:
/**
* Main
*
*/
public class Main {
static class IntegerClass {
int internal;
public IntegerClass(int i) {
internal = i;
}
public void setInternal(int i) {
internal = i;
}
public int getInternal() {
return internal;
}
}
public static void main(String[] a) {
int x = 10;
changeInteger(x);
System.err.println(x);
IntegerClass ic = new IntegerClass(10);
changeIntegerClass(ic);
System.err.println(ic.getInternal());
}
public static void changeIntegerClass(IntegerClass ic) {
ic.setInternal(500);
}
public static void changeInteger(Integer i) {
i = 500;
}
}