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;来代替呢?
请详细说明
------解决方案--------------------new了就有对象了,没new没暂内存,new了暂内存,对这个题目来说可以对换!
------解决方案--------------------String型的可以不用new运算符初始化
所以可以直接String school;
应该说基本类型都可以不用new来实例化
比如直接String s= "abc ";
int i=1;
而不用String s=new String( "abc ");
int i=new int(1);
而且如果将基本类型或类的引用放在整个类的作用域中就自动初始化
------解决方案--------------------直接给String赋值,这个字符串在串池中,new出来的,字符串在堆空间里,原本串池是为了提高效律设计的,所以尽量直接赋值,不要new,但当大量的字符串拼接操作要做时,最好用StringBuffer,效律提高很多
------解决方案--------------------String 是一个特殊的类型,它不是基本类型,是一个对象,但是它既可以用new也可以直接赋值。你给出的例子中两者可以互换,如果在字符串对象比较的情况下,建议参考楼上的字符串池的概念。
------解决方案--------------------arkwrightzhn(阿克赖特qq673188423,arkwright@21cn.com)
正解。
------解决方案--------------------对你的这个程序,如果换成你说的那样,还能省一点内存.