【发布时间】:2012-05-25 15:09:29
【问题描述】:
我想知道如果我们在静态方法中声明所有局部变量是否都变为静态?
例如:
public static void A(){
int x [] = {3,2};
changeX(x);
for (int i = 0; i< x.length; i++){
System.out.println(x[i]); // this will print -1 and 1
}
}
private static void changeX(int[] x){
x[0] = -1;
x[1] = 1;
}
据我所知,Java 总是按值传递,但是为什么在我们进行 changeX 调用后 X 的状态发生了变化?谁能解释一下?任何人都可以解释Java如何在内存分配方面处理静态变量吗?如果我们将静态变量作为参数传递给函数会发生什么(我知道人们通常不会这样做)
【问题讨论】:
-
这没有意义,因为静态对局部变量没有意义。它们是本地的,周期的,无论是在静态方法还是实例方法中。
-
它是一个局部或临时变量。函数结束后,就没有作用域了。
-
数组是java中的一个对象。数组的引用在调用时会传递给changeX,所以它在数组中的元素可以在changeX内改变。
-
您在这里混淆了大约五个不同的概念。
标签: java memory-management static static-methods