public class test1 {
        public static xinpoint[] pointdist;        public static void main(String argv[]){
                pointdist=new xinpoint[5];
                for(int xi=0;xi<5;xi++){                          test1.pointdist[xi].nbdi=new LinkedHashSet();}
                    if(test1.pointdist[0].nbdi==test1.pointdist[1].nbdi)System.out.println("yes");
                }       
        }
class xinpoint extends Point2D.Float{
        public static LinkedHashSet nbdi=null;
}
我想问为什么结果会是yes?????谢谢了

解决方案 »

  1.   

     public static LinkedHashSet nbdi = null;你知道这句话的含义吗?你知道static干啥用的吗?
      

  2.   

    static不是静态数据吗?方便我直接通过类名来引用啊
      

  3.   

    晕啊!你自己都说出来了,怎么还没理解呢!!
    共享的啊!什么叫共享,就是就算你创建了1000个对象,这个依然只有一个!
     test1.pointdist[xi].nbdi=new LinkedHashSet();} 
    这句话你是你变化再多的xi, 他和xinpoint.nbdi=new LinkedHashSet();} 但从结果看,没有任何区别,因为nbdi只有一份,虽然 xinpoint有很多份!
      

  4.   

    如果知道静态变量是属于类的,那么也就知道了,通过任何实例去调用这个变量,都是同一个引用,不管你对这个变量如何赋值,最终都是相当于对所有实例能调用的这个变量赋值。所以你在循环中做的赋值,只有最后一个值存在了xinpoint.nbdi中,其它的都被抛弃了。也就是说,不管你生成多少个实例,nbdi其实只有一个,它被类所拥有,不属于任务实例。