为什么 println() 打印这个?
Why does println() print this?
打印出以下代码:
-7
-7
11 44 -54
11
我认为它应该打印出来:
-7
-7
-11 -44 -54
11
密码是:
import static java.lang.System.out;
public class Point {
public static int x = 0;
public int y = 0;
public static int i = 7;
public static void main(String[] args) {
if (true) Point.x = -7;
out.println(x);
out.println(Point.x);
Point foo = new Point(-11,-44,-54);
Point bar = new Point(11,44,54);
out.println(foo.x + " " + foo.i + " " + foo.y);
out.println(Point.x);
}
//constructor
public Point(int x, int i, int y) {
this.y = y;
this.i = i;
this.x = x;
}
}
如果我删除 Point bar = new Point(11,44,54);
输出是:
-7
-7
-11 -44 -54
11
如果这是相关的:对于 运行 这个程序(在 Point.java
内)我(像往常一样)按 Shift+Ctrl+F9 和 Ctrl+F9 和 Shift+F10。我在安装了所有更新的 Win 8.1 64 位上 运行ning IntelliJ Idea 14.0.3 和 JDK 7u76。
因为x
是static
:对于class Point
的所有实例,x
只有一个实例是"shared" .这就是该值被覆盖的原因。事实上,x
不与任何对象相关联,而是与 class 本身相关联。请注意,变量 y
不是这种情况,它是一个 实例变量 .
所以在下面的代码中:
Point foo = new Point(-11,-44,-54);
Point bar = new Point(11,44,54);
x
设置为 -11
,然后设置为 11
。
打印出以下代码:
-7
-7
11 44 -54
11
我认为它应该打印出来:
-7
-7
-11 -44 -54
11
密码是:
import static java.lang.System.out;
public class Point {
public static int x = 0;
public int y = 0;
public static int i = 7;
public static void main(String[] args) {
if (true) Point.x = -7;
out.println(x);
out.println(Point.x);
Point foo = new Point(-11,-44,-54);
Point bar = new Point(11,44,54);
out.println(foo.x + " " + foo.i + " " + foo.y);
out.println(Point.x);
}
//constructor
public Point(int x, int i, int y) {
this.y = y;
this.i = i;
this.x = x;
}
}
如果我删除 Point bar = new Point(11,44,54);
输出是:
-7
-7
-11 -44 -54
11
如果这是相关的:对于 运行 这个程序(在 Point.java
内)我(像往常一样)按 Shift+Ctrl+F9 和 Ctrl+F9 和 Shift+F10。我在安装了所有更新的 Win 8.1 64 位上 运行ning IntelliJ Idea 14.0.3 和 JDK 7u76。
因为x
是static
:对于class Point
的所有实例,x
只有一个实例是"shared" .这就是该值被覆盖的原因。事实上,x
不与任何对象相关联,而是与 class 本身相关联。请注意,变量 y
不是这种情况,它是一个 实例变量 .
所以在下面的代码中:
Point foo = new Point(-11,-44,-54);
Point bar = new Point(11,44,54);
x
设置为 -11
,然后设置为 11
。