我有一个问题,现在我有两个课程如下
public class mainClass {
public static void main(String[] args){
String st1="st1";
String st2= "st2";
System.out.println(st1);
System.out.println(st2);
testClass t1=new testClass(st1);
testClass t2=new testClass(st2);
System.out.println(t1.getString());
System.out.println(t2.getString());
}
}
public class testClass {
static String testString1;
public testClass(String a ) {
testString1=a;
}
public String getString(){
return testString1;
}
}
st1
st2
st2
st2
不应输出以下内容?
st1
st2
st1
st2
因为我创建了两个testClass实例,每个实例都有不同的输入,为什么我得到相同的输出?
答案 0 :(得分:3)
testString1
中的testClass
变量被声明为静态,因此它将在testClass
的所有实例中保持相同的值。
如果希望testString1
为每个创建的testClass实例保存唯一值,则需要删除静态声明。
答案 1 :(得分:0)
testString1
是static(static String testString1;
)所以它在班级的所有实例之间共享。
答案 2 :(得分:0)
static String testString1;
应为String testString1;
。通过声明static
,您已将单个String
实例(名为testClass.testString1
)与testClass
的所有实例相关联。
答案 3 :(得分:0)
不是因为static关键字。 静态意味着该字符串对于此类的所有实例都是相同的。删除它,它将按预期工作。
答案 4 :(得分:0)
输出类似于静态变量。您必须了解静态以了解您的输出。
静态变量是变量,它是共享对象的所有实例的变量。您无需创建实例即可访问它。如果从一个实例更改它,那么对象将找到更改。
创建实例 t1 时,静态字符串 testString1 使用 st1 进行初始化。但是您创建实例的下一行 t2 , testString1 使用 st2 进行初始化。 t1 和 t2 实际上是指同一个变量。因此,当您打印 t1.getString()时,它会获得 testString1 的更新值。