for循环中的java静态值
请不要介意标题,我想不出更好的了。如果您有任何建议,请编辑它。我想弄清楚这是怎么回事。假设我有一个类test.java
class test{
public static void main(String[] args){
for(int i=0;i<8;i++){
new Testing().run();
}
}
}
以及Testing.java
类
class Testing{
private static String str = "";
public void run(){
if(str.equals("")){
str = "ten";
}else{
str = "five";
}
System.out.println(str);
}
}
所以每次for循环运行时,以及在创建测试对象时,它不应该将静态字符串值重新分配给""
和print ten
?
我得到的结果是
ten
five
five
five
five
five
five
five
难道不应该因为新的测试对象和重新分配静态字符串值而一直保持ten
输出吗
# 1 楼答案
不,因为你使用了一个静态变量。 静态变量对于类的所有实例(或对象)都是公共的,因为它是类级别的变量。换句话说,您可以说只创建静态变量的一个副本,并在类的所有实例之间共享。此类变量的内存分配仅在类加载到内存中时发生一次。 https://beginnersbook.com/2013/05/static-variable/
创建对象时,它会保存值“” 当您调用run str时,它将保持10,因为您可以看到打印的值。 在第一次迭代后,由于str不保留“”,它会将其值更改为5
您创建的任何对象都将保持str的相同值