【code=Java】
class Person{
private int i;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public Person(int i){
this.i=i;
}
}
public class J2SESample { public static void main(String[] args) {
    
    Person p1=new Person(1);
    Person p2=new Person(2);
    
    Person[] ps=new Person[2];
    ps[0]=p1;
    ps[1]=p2;
    p1=null;//here
    System.out.println(ps[0].getI());
}
}
【/code】
问题: 在p1置为null后,ps[0]同时为null么?ps[0].getI()返回什么?

解决方案 »

  1.   

    ps[0]和p1指的不是同一块区域么?
      

  2.   

    区域同一块 引用有两个 改变其中一个 把它赋值为null 不会改变那块区域 也不会改变另一个引用
      

  3.   

    画一下内存状态图就好了p1置为null之后 只是p1这个对象被销毁了 但是ps[0]仍然指向p1未被销毁前的内存区域  所以输出是1
      

  4.   

    要把【】换为半角的[] 贴子才能有格式.发贴时,你点“插入代码”那个按钮选“java”,会自动出来[code=Java][/code],你再把代码插到其中,这样也行啊.
      

  5.   

    ps[0],p1相当于是两个指针,指向new Person(1)这个对象所在的内存。
    将p1置为null,对ps[0]没有影响,它还是指向new Person(1)
      

  6.   

    数组时引用型变亮,和对象一样,ps[0]和p1一样是一个指向Person对象的引用,所以你把p1赋值为null,不影响ps[0],因为只要还有指向该对象的引用,那么JVM就不会把它当做垃圾回收掉
      

  7.   

    如果把p1=null 改为p1.setI(5),返回的是5。 
    是否可以这样理解,置为null只是取消掉了p1对那块区域的链接?
      

  8.   

    ps[0]=p1; 先赋值给了ps[0],所以两者指向同一个地址,
    p1=null 只是p1这个对象为空,地址还是存在。返回的值为1
      

  9.   

    在p1置为null后,ps[0] 不为null,还是指向原来p1所指的person(1)对象,p1只是个引用,相当于c的指针,当p1=null后,只是p1的值改变,而它原来所指的person对象仍然存在。
    ps[0].getI()返回1
      

  10.   


    ps[0] 和p1是指向和同一块区域.
    p1设为null,意思是让p1谁也不指向了,但ps[0]没有变,还指向原来的地方.