请问java中的定义问题

来源:百度知道 编辑:UC知道 时间:2024/05/11 05:02:04
假设A是一个类名 现在我要定义一个它的对象a 那么用
A a;与用A a=new A();的区别是什么呢 两者各是干什么的呢

A a的时候只是声明了一个A的对象a,并不分配内存。
A a=new A()的时候声明一个A的对象a,并给a分配合适的使用内存。

意义差不多,这两种语法都可以用,基本上一样,如果有参数, A a(b) is the same as A a = new A(b),这里,都一样调用了构造函数。之所以这样用,是因为它继承了C++的语言习惯,在C#里,几乎全部用new的语法。

A a其实是定义了一个引用,
A a = new A();是让a指向这个一个对象

一种是声明,一种是初始化,
合起来叫声明并初始化!
A a;声明这是一个类A的变量a;
a = new A();则是初始化变量!也就是产生一个A类的实例同时把引用句柄交给变量 a

只要看见new,就说明这时候要分配内存。比如你放在循环里for(int i=0;i<100000;i++){
ClassA a=new ClassA();
//这里省略了对a的操作若干
}
这样的话你就会new出无数个新的ClassA的对象,很耗内存。好的办法是先声明ClassA a;然后
for(int i=0;i<100000;i++){
//这里省略了对a的操作若干
}

Java中对象的处理是用引用
我打个比方
A a相当于是声明遥控器,他还没有与具体的电视机绑定(称为句柄)
A a=new A();声明a是一台电视机的遥控器,a指向具体的对象,对对象的操作是通过句柄(遥控器)来实现
可以再a=new A();此时指向另一台电视机,原来的电视机(对象)没有引用了,被Java垃圾回收器回收.