分配空字符时会发生什么?

时间:2011-12-17 11:33:15

标签: java c memory null

当我执行以下操作时,记忆中会发生什么:
在C:char *c=NULL;
在java中:MyClass mc=null;
在内存中会发生什么,这两种语言在内存中如何表示null?感谢

4 个答案:

答案 0 :(得分:4)

在C中,您基本上将指针设置为零值。事实上

char *c = NULL;

相当于

char *c = 0;

由于此地址没有内存映射,因此无法取消引用零指针。在具有虚拟内存的平台上,尝试这样做会触发页面错误,将控制转移到操作系统,操作系统通常会通过终止违规进程来处理这种情况(在UNIX中,您的进程会收到分段违例信号SIGSEGV)。 p>

在Java中,所有非基本类型变量都是引用。 Java中的null是一个文字,表示特殊未命名类型的唯一值。此类型可以转换为任何引用类型,允许您将null放入任何引用变量中。尝试使用此类引用访问对象将引发一个名为NullPointerException的未经检查的异常。有关详细信息,请参阅JLS 3.10.7JLS 4.1

答案 1 :(得分:1)

您在此处执行的操作是将char 指针分配给NULL

它具有基本相同的效果,在C中取消引用NULL将使程序死于SIGSEGV(好吧,在类Unix操作系统下,包括Linux和Mac OS X),而巨大的区别将抛出NullPointerException

请注意mc实际上是一个引用,而不是一个类本身。它与C指针几乎相同。

NULL在这两种情况下都有一些实用价值:您可以在Java中测试if (mc == null)。在C中,这将是一个简单的if (!p)(但if (p == NULL)也可以)。

答案 2 :(得分:1)

您可以在以下帖子中找到答案:

What exactly is null in Java memory
Java - Does null variable require space in memory

所以基本上,null本身不占用空间,但是将对象置为null会占用空间

答案 3 :(得分:-1)

NULL是一个特殊值,表示该位置没有数据,它的具体表示可能会有所不同。在C中它只是0,我注意到了java。