我们都知道 无论一个类生成了多少个对象  所有这些对象共同使用唯一一份static的成员变量 一个对象对该静态成员变量进行了修改 其他对象的该静态成员变量的值也会发生变化比如static int Age;Test t = new Test();      Test tt = new Test();

t.Age = 1;   tt.Age = 2;

System.out.println(t.Age );
System.out.println(tt.Age);
打印的值都是2但是 这样写打印的值是不一样的 这是为什么?
System.out.println(t.Age = 1);
System.out.println(tt.Age = 2);

解决方案 »

  1.   

    我晕,
    System.out.println(t.Age );
    System.out.println(tt.Age);
    打印的值都是2
    是因为此时的age == 2;System.out.println(t.Age = 1);此时age == 1,所以打印1
    System.out.println(tt.Age = 2);此时age == 2,所以打印2因为静态的值不在实例化对象引用范围,所以通常我们都是Test.Age = 1这种方式进行操作,当然你用实例化对象去引用操作,结果也不会有问题,它会重定向到Test.Age
      

  2.   

    就是说 如果不用类调用属性Test.Age = 1 
    而是用对象调用System.out.println(tt.Age);那么属性的值都会是一样的.
    所以提倡用类调用属性 
      

  3.   

    package com.aa;
    //静态变量相当于一个全局变量使用
    public class Test {
        static int a;//静态变量
        public static void main(String[] args){
         Test t1=new Test();
         Test t2=new Test();
         t1.a=1;
         t2.a=2;//此时a的值是2,所有对象引用该变量的值都是2
         System.out.println("t1.a="+t1.a);//t1.a=2
         System.out.println("t2.a="+t2.a);//t2.a=2
         System.out.println(t1.a=1);//此时将a的值置为1.相当于System.out.println(1);
          System.out.println(t2.a=2);//此时将a的值置为2.相当于System.out.println(2);
          System.out.println(3);
        }
    }