Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;在Java中是空的吗? 我一直在想为什么C++会让我疯狂的输入代码 null >代码>。前几天我突然想到了这一点;多年来,我一直在用Java键入null(小写)。现在我突然在C++编程,肌肉块的小部分让我疯狂。 WikIdPuriFielt定义了C++ NULL作为STDDEF:的一部分_Java_C++_Null - Fatal编程技术网

C++;在Java中是空的吗? 我一直在想为什么C++会让我疯狂的输入代码 null >代码>。前几天我突然想到了这一点;多年来,我一直在用Java键入null(小写)。现在我突然在C++编程,肌肉块的小部分让我疯狂。 WikIdPuriFielt定义了C++ NULL作为STDDEF:的一部分

C++;在Java中是空的吗? 我一直在想为什么C++会让我疯狂的输入代码 null >代码>。前几天我突然想到了这一点;多年来,我一直在用Java键入null(小写)。现在我突然在C++编程,肌肉块的小部分让我疯狂。 WikIdPuriFielt定义了C++ NULL作为STDDEF:的一部分,java,c++,null,Java,C++,Null,扩展为空指针的宏 常数它可以定义为 ((void*)0)、0或0L,具体取决于 编译器和语言 Sun的文档告诉我Java的“空文本”: null类型有一个值,即null 引用,由文本表示 null,由ASCII格式构成 人物。空文本始终为空 为空类型 这一切都很好。我知道空指针引用是什么,谢谢你的编译器注释。现在我对Java中的文字概念有点模糊,所以我继续阅读 文本是源代码 固定值的表示; 文本直接表示为 您的代码不需要 计算 还有一个特殊的空文本 可以用作任何 引用类型。可以分配空值 到任何变

扩展为空指针的宏 常数它可以定义为 ((void*)0)、0或0L,具体取决于 编译器和语言

Sun的文档告诉我Java的“空文本”:

null类型有一个值,即null 引用,由文本表示 null,由ASCII格式构成 人物。空文本始终为空 为空类型

这一切都很好。我知道空指针引用是什么,谢谢你的编译器注释。现在我对Java中的文字概念有点模糊,所以我继续阅读

文本是源代码 固定值的表示; 文本直接表示为 您的代码不需要 计算

还有一个特殊的空文本 可以用作任何 引用类型。可以分配空值 到任何变量,但的变量除外 基本类型。你没什么了不起的 可以处理空值超过 测试它的存在。所以,, null通常在程序中用作 标记,指示某个对象正在运行 不可用

好的,我想我现在明白了。在C++中,NULL是一个宏,当编译时,它会被计算为空指针常数。在Java中,null是一个固定值,任何非原语也可以赋值;非常适合在方便的
if语句中进行测试

Java没有指针,所以我可以理解为什么它们将null保留为一个简单的值,而不是任何花哨的东西但是为什么java决定将所有大写字母
NULL
更改为
NULL


此外,我在这里遗漏了什么吗?

Java的null更像C++0x的nullptr。C++中的NULL只有0,可以最终解决int,而不是像你想要的指针。考虑:


void f(int);
void f(char*);

...

f(NULL); // which f()?
C++0x有nullptr,它解决了这个问题,但它仍然不能完全等同于Java的null。它们只是不同的语言

哦,另一个区别是Java没有指针(或者它是这么说的)。在爪哇中,可以合法地将null分配给引用,在C++中,如果没有使用不正确的构造,就无法做到这一点。诚然,如果没有这种能力,Java几乎毫无用处,但这肯定是另一个重要的区别。

  • NULL
    是一个预处理器指令标识符,按照惯例,这些标识符都应该是大写的

  • null
    是一种表示常数值的语言,根据惯例,应全部降低(就像
    true
    false


使用
0
而不是
NULL

<>从《语言的创造者》看《C++程序设计语言》一书,Bjarne Stroustrup:

在C语言中,通常定义一个宏
NULL
来表示零指针。因为 C++的更紧凑类型检查,使用了普通<代码> 0代码>,而不是任何建议的代码> null < /Cuff>宏,导致更少的问题。如果您觉得必须定义
NULL
,请使用
const int NULL=0

< C++ > null是一个宏,当 编译后,定义空指针 不变的

这就是你弄错的地方。在C++中,NULL是0,而没有别的。指针和整数都可以为空


另一方面,在java中,null是一个null指针,这意味着只有对象才可以为null。

好吧,我不知道java为什么要将null更改为null,但是大写对于类型来说更麻烦(至少在我看来)。但是,你可能总是问Sun::P.总之,java没有指针是不完全正确的,因为java或C++语言中的普通引用或类似的东西比指针在C++中更像指针。例如,在C++中,引用不能为空,但是java中的引用可以。C++中的引用不能改变它指向的变量(我可能在这一点上出错了),但是java引用可以。

不,你已经得到了它。在C++中,空指针是指派给指针的任何文字零值。code>NULL

只是
0
的一个宏,因此
ptr=0
ptr=NULL
是相同的。仅出于方便/可读性考虑。之所以大写是因为C和C++中有一个长期的约定,宏的名称应该是大写的。
在Java中,
null
是一个内置的文本,由于它不是宏(而且Java也没有宏的概念),所以没有令人信服的理由将其改为大写。

关于你的最后一个问题,我不确定小写null背后的设计原理是什么, 但我认为目标是使null成为语言级别的文字(如true或false),而不是常量


java中的关键字通常是小写的,因此命名文字也是小写的。常量(如Integer.MAX_值)通常是大写的

> java没有指针,正如你所说的,这就是为什么“null”的概念在java和C++之间完全是不可比拟的。p> 你的问题对“角度和苹果的区别”有着同样的意义,即除了显而易见的以外,它不能用任何其他方式来回答:C++中的<代码> null <代码>和java中的代码> null <代码>是两个完全而完全无关的概念。
Java从未“决定”将所有的大写字母
NULL
更改为
NULL
,因为Java的
NULL
与C++的
NULL

指针基本上都是内存地址没有任何关系。还有