【发布时间】:2015-03-28 12:03:03
【问题描述】:
让我们考虑以下代码:
public class Testing {
static int i = 47;
public static void main(String[] args) {
Testing t1 = new Testing();
Testing t2 = new Testing();
System.out.println(t1.i == t2.i);
我正在创建一个属于 Testing 类的静态字段,并且该字段在该类 t1 和 t2 的两个实例之间共享。然后我测试它们是否引用了内存中的相同值,事实上,它们确实如此,结果是正确的。这对我来说很清楚。
但是,如果我从 int i 的声明中删除 static 关键字,就会发生意想不到的事情。
public class Testing {
int i = 47;
public static void main(String[] args) {
Testing t1 = new Testing();
Testing t2 = new Testing();
System.out.println(t1.i == t2.i);
我希望 t1 和 t2 这两个实例的字段值都为 47,但它们的字段位于不同的内存地址中。但令人惊讶的是,当测试 t1.i == t2.i 在这种情况下我也得到了正确的结果 - 为什么? int i = 47; 字段不再是静态的,因此我希望它对于类的每个实例都位于不同的内存地址中,但相等性会产生 true。
【问题讨论】:
-
==测试值相等。 -
int是“原始”,而不是参考。您只是在测试整数值。