我对这个方法很困惑。我通常认为你需要归还一些东西。或者在我看来,我会想到需要一个for循环,它将元素从每个元素加5的方法中传回。
但是当数组传递给方法时,数组本身会改变,但为什么呢?
public static void main(String[] args) {
int ray[]={3,4,5,6,7};
change(ray);
for(int y: ray){
System.out.println(y);
}
}
public static void change(int x[]){
for(int counter = 0; counter < x.length;counter++){
x[counter]+=5;
}
}
答案 0 :(得分:0)
在Java中,所有对象都通过引用传递,而数组是对象。这意味着您的change
方法接收到在main
中创建的相同数组 - 而不是它的副本,即同一个对象。因此,当您修改它时,main
方法也会看到更改。
答案 1 :(得分:0)
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;
}
}