A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Student{
   
   private String name ;

   void setName(String name){
      
     this.name = name;
    }
   String getName(){

       return name;
    }
   


    void study(){
      
      System.out.println("Love Java");
   }


}

class TestStudent{
  
  public static void main(String args[]){

     Student s = new Student();

      new Student().study();  

       s.study();            

      new Student().setName("zhangsan");  //匿名对象传递"zhangsan"给setName()

          System.out.println(new Student().getName());//此处应该返回"zhangsan"名字,但输出却是null

       s.setName("lisi");

          System.out.println(s.getName());

   
    }


}


PS:为什么匿名对象传递“zhangsan”名字后,返回值为null ?

4 个回复

倒序浏览
这个问题就不多做解释了,你一共new了4个对象,三个匿名对象,每个都在堆区有自己的空间. 栈中并没有变了指向,所以在你new Student().setName("zhangsan");  之后就没用了,只能坐等gc(),   System.out.println(new Student().getName());这句相当于你又new了一个对象,并没有赋值,打印的只是name字段的默认值null,困了,多去看看视频吧。。
回复 使用道具 举报
MeloX 发表于 2014-8-5 04:16
这个问题就不多做解释了,你一共new了4个对象,三个匿名对象,每个都在堆区有自己的空间. 栈中并没有变了指 ...

谢谢回复,我回去再将这部分补习下~~~
回复 使用道具 举报
匿名对象只对函数进行一次调用时有效,new一下就等于第二个对象了,2楼讲解比较清楚。
回复 使用道具 举报
这两个对象不是同一个对象。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马