为什么零&;char数据类型的null在java中被视为相同

为什么零&;char数据类型的null在java中被视为相同,java,null,char,zero,Java,Null,Char,Zero,我必须通过检查一个字符是否有零值和一个字符是否有null'\u0000值来执行一些任务,但我不知道java编译器是否将两者视为相同的 下面是示例代码 char nullTest = 0; System.out.println(nullTest == '\u0000'); //it is giving true 如果我将它初始化为nullTest='0',那么它给出的是false,但在我的程序中,我经常将数字&null'\u0000'赋给这个变量,因为它会给出运行时错误,符号\uxxx主要只出

我必须通过检查一个字符是否有零值和一个字符是否有null'\u0000值来执行一些任务,但我不知道java编译器是否将两者视为相同的 下面是示例代码

char nullTest = 0; 
System.out.println(nullTest == '\u0000'); //it is giving true

如果我将它初始化为
nullTest='0'
,那么它给出的是false,但在我的程序中,我经常将数字&null
'\u0000'
赋给这个变量,因为它会给出运行时错误,

符号\uxxx主要只出现在.java和.properties文件中。在这里,它被解读为一个Unicode代码点。Unicode文本(=使用各种特殊字符)通常使用UTF-8格式(尽管有时也使用UTF16LE和UTF16BE)


因此,如果您在java中使用
char nullTest=0初始化一个字符
不提供单引号,它在内部被视为
nullTest=unicode of 0
,这是
'\u0000'
,但是如果您使用诸如
char nullTest='0'
之类的引号初始化一个字符,它将被视为字符串字符,并存储为'0'

如果我将其初始化为nullTest='0',则它将给出错误
。因为
'0'
不是
0
。它有一些(Unicode?)代码,与
0
不同。另一方面,根据定义,
'\u0000'
是代码为
0
的字符。我不知道你为什么称它为
null
@dyukha它是48。问题是为什么0和“\u000”被视为相同的,我如何区别对待它们我们都知道这是两个不同的东西,\u000是ASCII码为0的字符的unicode表示,不要与\u混淆。实际上,java读取带有此前缀的unicode
\uxxx
不是unicode码点。它是一个UTF-16代码单元。请参阅JLS:“形式为
\uxxx
的Unicode转义,其中
xxxx
为十六进制值,表示编码为
xxxx
的UTF-16代码单元。”