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

JAVA小问题,高手解答一下,谢谢!
class   Preson  
{   public   String   name;  
public   int   age;  
public   void   getInfo()  
{  
System.out.println(name);  
System.out.println(age);  
}  
}  
class   Student   extends   Preson  
{  
String   school=new   String();  
public   void   study()  
{  
System.out.println( "Studding ");  
}  
public   void   getInfo()  
{  
super.getInfo();  
System.out.println(school);  
}  
public   static   void   main(String[]   args)  
{  
Preson   p=new   Preson();  
p.name= "person ";  
p.age=30;  
p.getInfo();  

Student   s=new   Student();  
s.name= "student ";  
s.age=16;  
s.school= "清华大学 ";  
s.getInfo();  
s.study();  
}  
}  
这里的String   school=new   String();   是否可以用String   school;来代替呢?  
请详细说明


------解决方案--------------------
这里的String school=new String(); 是否可以用String school;来代替呢?
---------------------------------
String school=new String():定义了一个指向String的引用,这个引用也指向了一个String对象,即使这个对象在这里是空的.
String school 只是定义了一个指向String的引用,没有指向任何String对象.

你的这里可以用来代替,但只不是过概念上的问题,因为String是不可继承和修改的,当每次为school赋值一个新的String字符串时,school都会指向新的String对象,而原来的String对象则没有引用指向,会被垃圾回收器给回收.

------解决方案--------------------
可以呀
String school 就是定义了一个字符串的引用;
String school=new String(); 而这个语句就把school指向了新创建的空字符串对象

即使不指定school的初始值,对象初始化时,school也默认初始化为null
------解决方案--------------------
person拼错了

飘过...
------解决方案--------------------
说累了.@_@
------解决方案--------------------
是可以的啊,只是一个引用而已;
个人觉得你这样写类有点问题