日期:2014-05-20  浏览次数:20673 次

一个小问题,帮小弟做一下内存分析!!
class Person{
  String name;
  void setName (String name){
  this.name = name;
  }
  String getName(){
  return name;  
  }
}

class Student{
  public static void main(Strring[] args){
  Person a = new Person();
  a.setName("kakanu");
  System.out.println(new Person().getName());// 用new Person()去调getNname方法结果为什么是null,而没得到返
  //回值: kakanu ?
  }
}

------解决方案--------------------
new person()构造了一个新的匿名对象,你没有给他赋值,他返回的肯定是NULL啊。把System.out.println(new Person().getName());改成:System.out.println(a.getName());
------解决方案--------------------
System.out.println(new Person().getName());在这句里面,你使用的new person()是构造了一个新的对象,这个对象跟你前面构造的那个对象a不是同一个对象。
------解决方案--------------------
因为在Person 类中的name定义为非static,所以当你new Person().getName()时候,实际上
创建了一个新的Person对象,name会再次被初始化,于是name = null,如果你在String name前面
加个static的话,那么得到的就是kakanu,即使你new Person().getName(),因为name成为
了共享的了
------解决方案--------------------
Person a = new Person(); 这里你声明了一个对象 
调用a.setName给它赋值了

System.out.println(new Person().getName());// 这句话里的new Persion(); 你又声明了一个对象 你并没有给这个对象的name属性赋值 所以输出是null