阅读下列代码,并回答问题
Student[ ] stu =new Student[ 3 ] ;
for( int i=0;i<stu.length;i++ ){
   stu[ i ]=new Student();
}
Student temp = stu[ 0 ];
stu[ 0 ] = stu[ 1 ];
stu[ 1 ] = temp;
请说明此段代码中,共声明了几个引用,共构造了几个对象

解决方案 »

  1.   

    数组是一个对象,本身有一个引用
    数组中存了三个引用,分别指向三个Student对象
    temp也是指向Student对象的一个引用,它和数组的第一个元素指向的对象是一样的所以,四个对象,五个引用
      

  2.   

    循环就new了三次,怎么可能才2个对象,谁给的答案?nst
      

  3.   

    4个对象   4个引用。
    这里要搞清楚的是所谓的引用也是对象的引用。而不是变量
    但是这里要搞清楚的是一个数组,三个对象。加起来就是四个对象,每个对象都有自己的一个引用(C中叫做句柄),temp = students[0],也就是将students[0](这个其实还是引用)赋给temp,所以temp还是持有的是student[0]所代表对象的引用。所以temp没有创建新的引用,仅仅是多创建了一个变量而已。如果该变量没有赋值(引用型变量只能赋引用,不能是基本类型),那么temp就为null,也就是没有引用。再说一下。java是不能直接操纵对象的,只能通过持有该对象引用的变量才操纵。new Object()其实就是新创建对象的一个引用。
      

  4.   

    答案是五个引用,四个对象!谢谢大家,不过10楼提出的问题我还是不太明白,temp算变量?还是引用?
      

  5.   

    加上
    stu[ 0 ] = null;
    System.out.println(temp == null);
    试试
    java除了基本类型变量,其他变量全是引用,哪有持有引用的变量一说,java中的引用不能和c中的引用混为一谈,用法也不尽相同
      

  6.   

    四个对象,五个引用
    temp和stu[ 0 ]是两个不同的引用
      

  7.   

    temp和stu[ 0 ]指向同一个对象