public class Test {
int x=10;
static int y=20;
public static void main(String[] args){
Test t1=new Test();
Test t2=new Test();
t1.x*=2;
t1.y*=3;
t2.x+=4;
t2.y+=5;
System.out.println(t1.x);
System.out.println(t1.y);
System.out.println(t2.x);
System.out.println(t2.y);
}
}
为什么结果是20,65,14,65呢?两个65是怎么来的?求解释啊...(本人初学者)

解决方案 »

  1.   

    t1, t2 有各自的X值, 但是他们共享Y的值
      

  2.   

    静态的y是公用的,两个对象用的是同一个y
    而非静态的x是两个对象分开的两个。每个对象拥有独立的x
      

  3.   

    两个x的值我知道是怎么来的,我不明白的是为什么t1.y*=3的值不是60呢?t1.y不是引用静态变量y的值吗?那t1.y应该等于20呀,求解释
      

  4.   

    那t1.y不是应该等于60吗?
    说错了,t1.y不是等于20吗?那t1.y*=3应该是60呀(我是这么理解的,我知道是错的,但是我就是想不明白,能不能解释一下呀?我是新手,见谅!)
      

  5.   

    那t1.y不是应该等于60吗? t2.y+=5; // y = 65
      

  6.   

    注释写好了,按照程序执行的过程。注意y的值不管是t1改变还是t2改变,最终的改变都是改变了y的值
    public class StaticTest { int x=10;
    static int y=20;
    public static void main(String[] args){
    StaticTest t1=new StaticTest();
    StaticTest t2=new StaticTest();
    t1.x*=2; //t1.x = 20
    t1.y*=3; //y=60
    t2.x+=4; //t2.x=14
    t2.y+=5; //y=65
    System.out.println(t1.x); //20
    System.out.println(t1.y); //65
    System.out.println(t2.x); //14
    System.out.println(t2.y); //65
    }}
      

  7.   

    这么说我就明白了,也就是说执行到“t2.y+=5”这句的时候y的值是65,又因为y是静态变量,所以打印的时候不管是t1.y还是t2.y它的值都是y的最终值也就是65,那么再实例化一个t3,再最后面加一句打印t3.y,打印出来的也是65咯?大神,我这么理解对不对?
      

  8.   

    这么说我就明白了,也就是说执行到“t2.y+=5”这句的时候y的值是65,又因为y是静态变量,所以打印的时候不管是t1.y还是t2.y它的值都是y的最终值也就是65,那么再实例化一个t3,再最后面加一句打印t3.y,打印出来的也是65咯?大神,我这么理解对不对?
    对的
      

  9.   

    这么说我就明白了,也就是说执行到“t2.y+=5”这句的时候y的值是65,又因为y是静态变量,所以打印的时候不管是t1.y还是t2.y它的值都是y的最终值也就是65,那么再实例化一个t3,再最后面加一句打印t3.y,打印出来的也是65咯?大神,我这么理解对不对?
    对的
    谢谢您