char 的默认值是什么?

106
char c = '\u0000';

当我打印c时,命令行窗口中会显示'a'。

那么char类型字段的默认值是什么?

有人说'\u0000'在Unicode中表示null,这是正确的吗?


2
你可以通过以下方式检查你的字符是否具有默认值:char == 0 - ACV
14个回答

122

char属性的默认值确实是Java语言规范中所述的'\u0000'(空字符),详见第§4.12.5 变量的初始值节。

在我的系统中,System.out.println('\u0000');这行代码会输出一个小方块,表示它不是可打印字符——这是预期的结果。


33
需要注意的是,'\u0000' 不等于 null - Edd
空字符是什么? 这个问题的一些答案将默认值称为空字符。 - Quazi Irfan
4
'\0' 这个字符怎么样?它们不一样吗? - Tarik
6
@Tarik 是的,它们是一样的。 - Óscar López
3
@iamcreasy 你说的是正确的。我的注释只是指“空字符”是一个字符。在Java术语中,它不是null,即\u0000 == null会返回false - Edd
显示剩余2条评论

32

'\u0000' 是字符的默认值。它的十进制等价值为0。

当你声明一些未初始化的char变量时,默认情况下会将'\u0000'赋值给它。

看下面的代码:

public class Test {
    char c;

    public static void main(String args[]) throws Exception {
        Test t = new Test();
        char c1 = '\u0000';
        System.out.println(t.c);
        System.out.println(c1);
        System.out.println(t.c == c1);
    }
}

这段代码将会在最后一个打印输出true

1
如果你在面试中需要检查字符是否为默认值,请不要试图记住\u0000。 如果使用Character.getNumericValue将默认字符转换为数字,则会返回-1。 为了扩展答案中的代码,这两个语句都将打印-1 System.out.println(Character.getNumericValue(c1));``` - walv

12

字符的默认值是Character.MIN_VALUE,在内部表示为MIN_VALUE = '\u0000'

此外,您可以检查字符字段是否包含默认值。

Character DEFAULT_CHAR = new Character(Character.MIN_VALUE);
if (DEFAULT_CHAR.compareTo((Character) value) == 0)
{

}

6

'\u0000'代表null。因此,如果您打印未初始化的char变量,您将得到空值。


2
实际上你会得到一个编译错误 ;) '\u0000' 是 char 字段“初始化”的默认值。 - Edd
1
你将获得空白或方块,而不是什么也得不到。 - Roshana Pitigala
如果我将c和c1都设置为'\u0000',那么输出结果会是"0"。System.out.println(c+c1); - alan

3

它是 '\u0000'。更多信息请参见此处


1

\u0000 是 Java 中 char 类型的默认值。

正如其他人提到的,您可以使用比较来检查未初始化变量的值。

char ch;
if(ch==0)
    System.out.println("Default value is the null character");

0

默认字符是具有整数值0(零)的字符。

char NULLCHAR =(char)0;

char NULLCHAR ='\0';


0

char 数据类型的默认值为 '\u0000'(或 0),最大值为 '\uffff'(或 65,535,包括)。

您可以在 这里 查看相关信息。


3
问题已经有一个被接受的答案以及其他几个答案。为了让你的回答有用,它应该添加有用的新信息或新见解来解决问题。只是重复其他回答中的信息是没有帮助的。 - AdrianHHH

0
请注意 null 和零之间有明显的区别。在上面引用的 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 中,有这样一句话:
任何引用类型都可以使用特殊的 null 字面量作为值。null 可以赋值给任何变量,但不能赋值给原始类型的变量。你几乎无法对 null 值做任何操作,只能测试其是否存在。因此,在程序中通常使用 null 作为标记来指示某个对象不可用。
这就是为什么以下语句会导致错误而不是其他语句的原因:
char a = null; // 类型不匹配:无法从 null 转换为 char。
char b = 0; // 有效的语法。

0

很诱人地说,根据以下证明,将空格或整数0视为白色空间。

char c1 = '\u0000';
System.out.println("*"+c1+"*");
System.out.println((int)c1);

但我不会这么说,因为它可能在不同的平台或未来有所不同。我真正关心的是我永远不会使用这个默认值,在使用任何字符之前,只需检查它是否为\u0000,然后使用它以避免程序中的误解。就这么简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接