我想知道如果我们在静态方法中声明它们,所有局部变量都会变成静态吗?
例如:
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如何在内存分配方面处理静态变量?如果我们将静态变量作为参数传递给函数会发生什么(我知道人们通常不会这样做)
大多数问题的答案是“与任何其他变量相同”。
静态方法中的局部变量只是静态方法中的局部变量。它们不是静态的,也没有任何特殊之处。
Static 变量保存在附加到相应的内存中Class
物体;静态引用变量引用的任何对象都位于常规堆中。
当您将静态变量作为参数传递给方法时……绝对不会发生任何有趣的事情。
关于代码中的场景:
- 想象一下,你有一个字符串上的玩具气球(气球是你的数组对象,字符串是对它在
A()
.)
- 现在你打结another把绳子绑在气球上,然后把绳子交给朋友(这正是当你打电话给气球时发生的事情)
changeX()
method:字符串是方法的参数,它指向同一个对象。)
- 接下来,你的朋友拉动绳子,用黑色记号笔在气球上画一张脸(就像
changeX()
方法修改数组)。
- 然后你的朋友解开他的绳子,只留下你的绳子附在气球上(方法返回,局部变量在
changeX()
超出范围。)
- 最后,你卷起绳子,看着气球:当然,你看到了脸(你的脸)。
A()
例程会看到更改后的数组。)
真的就是这么简单!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)