0

当我运行这个程序时,它给了我以下输出。为什么我得到 gy 为 2 而不是 5。那么为什么我得到这个输出?我错过了什么。请解释一下。

public class G {

   public  int x = 3; 
   public static int y = 7; 

   public static void main(String[] args) {

       G g = new G();
       G h = new G();

       g.x=1;
       g.y=5;
       h.x=4;
       h.y=2;

       System.out.println("g.x="+g.x);    
       System.out.println("g.y="+g.y);
       System.out.println("h.x="+h.x);
       System.out.println("h.y="+h.y);

    } 
}

输出:

g.x=1
g.y=2
h.x=4
h.y=2
4

3 回答 3

1

静态变量是每个类一个,而不是每个实例一个。

g.yh.y(and )都G.y指向同一个变量,所以最后一个赋值获胜,值为 2。

通过类的实例访问static变量是令人困惑的,但 Java 允许这样做。

于 2013-09-27T18:36:50.270 回答
1

提示:尝试考虑静态变量的用途和行为。

这个

声明中带有 static 修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。

于 2013-09-27T18:37:21.670 回答
0

因为,y 是静态的,所以,首先你分配 y=7.then 5,最后是 2.第一个值覆盖到 5,然后再次覆盖到 2.现在当前 y 值是 2。如果你没有提到这个值是静态的输出将是 (g dot y=5) 和 (h dot y=2)

于 2021-12-27T15:54:17.227 回答