阅读下列代码,并回答问题
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;
请说明此段代码中,共声明了几个引用,共构造了几个对象
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;
请说明此段代码中,共声明了几个引用,共构造了几个对象
数组中存了三个引用,分别指向三个Student对象
temp也是指向Student对象的一个引用,它和数组的第一个元素指向的对象是一样的所以,四个对象,五个引用
这里要搞清楚的是所谓的引用也是对象的引用。而不是变量
但是这里要搞清楚的是一个数组,三个对象。加起来就是四个对象,每个对象都有自己的一个引用(C中叫做句柄),temp = students[0],也就是将students[0](这个其实还是引用)赋给temp,所以temp还是持有的是student[0]所代表对象的引用。所以temp没有创建新的引用,仅仅是多创建了一个变量而已。如果该变量没有赋值(引用型变量只能赋引用,不能是基本类型),那么temp就为null,也就是没有引用。再说一下。java是不能直接操纵对象的,只能通过持有该对象引用的变量才操纵。new Object()其实就是新创建对象的一个引用。
stu[ 0 ] = null;
System.out.println(temp == null);
试试
java除了基本类型变量,其他变量全是引用,哪有持有引用的变量一说,java中的引用不能和c中的引用混为一谈,用法也不尽相同
temp和stu[ 0 ]是两个不同的引用