我理解楼主说的空对象是不是就是引用为空(null)的对象啊.假如有 A a = new A(); 在java对象的产生是分两步的: 1.在栈区声明对象 如A a,这时声明的内容相当于一个指针(我们姑且认为它是一个指针,也可以理解为引用),当a=null时表明这是一个没有指向任何对象. 2.实例化a,操作如下a=new A()这是在堆区为a分配了空间.也就是由栈区的a指向堆区的new A()对象.而a=null则是表明,首先,a是必然在栈区的,a的值是一个地址(假设它真的是一个指针),a=null表示的是a的值是null,与堆区无关此时的a与堆并无关系, 垃圾回收机制便是将一个对象赋值为null以切断与之前关联对象的关系之后将对象回收的.
那个3楼指的应该是一个对象占用的最小空间是8个字节,即没有成员变量的类实例出的对象占用的内存控件。他那里说的空对象的这个“空”指的是没有成员(是否有方法不清楚了,可能不考虑方法,因为一个类的方法,即使是非静态方法,在内存中也只占一处内存,所有对象公用),即这样的类实例的对象 Class A { //没有成员变量,可能有成员方法 }
就是值为null的变量
String str="";
5楼的代码我明白,
String str=null;//只是定义一个引用
String str="";//定义一个引用,并指向空串但是,空对象的概念,还是不懂?
望赐教!
a = null;
我正在测试 一个对象占用的内存空间。详细请看:
http://topic.csdn.net/t/20060823/21/4971017.html其中第3楼提到 : 空对象占8个字节。但是没有“空对象”的概念
我举个例子来说下我对null的理解。比如有个房子类的具体对象,你家的房子。
房子类有个方法:找人。而人又可以干很多事。
现在存在这样一种情况:你们家没人在,都出去上班了。这个时候来了个客人去你们家的房子找人。
但是很显然,这个时候你们家没有人,这是客观存在的一种状态。既然对JAVA来说世间万物截对象。那么没有人的这种状态JAVA自然需要来描述他,有什么来描述他呢?就是null,当你家没人的时候,而又有人来你家找人,这个时候JAVA给你一个null,告诉你家里没人。既然没人,你又想让人去干活,你让一个不存在的人去干活,这个时候一般就会出现空指针异常。所以我理解null的意思就是,什么都没有。
回复 12楼:您的意思 是否等价于下面的代码:String str;//只定义引用,而没有对象
在java对象的产生是分两步的:
1.在栈区声明对象 如A a,这时声明的内容相当于一个指针(我们姑且认为它是一个指针,也可以理解为引用),当a=null时表明这是一个没有指向任何对象.
2.实例化a,操作如下a=new A()这是在堆区为a分配了空间.也就是由栈区的a指向堆区的new A()对象.而a=null则是表明,首先,a是必然在栈区的,a的值是一个地址(假设它真的是一个指针),a=null表示的是a的值是null,与堆区无关此时的a与堆并无关系, 垃圾回收机制便是将一个对象赋值为null以切断与之前关联对象的关系之后将对象回收的.
Class A
{
//没有成员变量,可能有成员方法
}
例如
class A{}
A a;
a==null?true:false//为true。
A a=new A();
a==null?true:false//为false。
其中8中基础类型按Java标准计算,引用类型按4字节。其实引用类型应该按照4字节加上引用类型的大小计算大小。因为虽然引用类型的成员变量在对象(假设为A)中是存储的4字节地址,但他执行的成员对象(假设为B)是依附于A存在的,所以这个成员变量占的大小是4字节+对象B的大小
如果只申明没有new,那个不是对象只是一个引用
object o=null;
空对象 的 概念:1、String str=null;//只有引用,没有实现对象,就是“空对象”
多数同仁支持此种解释
2、class A{}//此类没有属性,但是可以有方法,
少数同仁支持此种解释,如18楼但是,没有一个标准的解释,
也许,Java里面就没有这个概念!看来需要深入研究!谢谢大家的讨论!!
对象 = 其中一套具体的商品房
引用/变量 = 一张房契或者房屋产权证,上面写着房子的地址和所有人空对象实际上指的是变量,一张空白的房契,虽然格式正确,单没有内容
你指的是:
例 class classOne{ System.out.println("这是空类--null");
}
class objectOne;
则声明的对象objectOne是个空对象,因为还没有引用“实体”(成员变量未分配内存)
还例如class objectOne = new classOne();
这时她不是空对象,
如果 objectOne = null;表示不再引用任何“地址号”,引用为空--这时就是空对象。
这里涉及到对象建立的过程!
所以一个类只生成对象,但没有给该对象的属性赋值,所以楼主感觉是“空对象”。但java中确实没有”空对象“这么一说。对象就是对象。只是它的属性有无值区别。
但这种所谓的“空对象”绝不是null,因为它已经是对象了,分配内存空间了。和上面的字符串对象对比一下。(本人自己的想法,望各位高手指点!)
经过测试,得出这样的结论:
空对象指的是,没有属性的类生成的对象
例如:
class A{}//其生成的对象就是空对象但是,实际中并没有“空对象”这个概念!
谢谢大家的讨论!