为什么控制台上不显示char默认值?

时间:2017-04-06 22:06:24

标签: java

我想知道当您尝试打印char默认值时,它会在控制台上显示什么。但不幸的是,我在控制台上看不到任何东西。为什么?

我应该能够看到0对了。由于char变量的默认值是空字符,即'\u0000'(其十进制等值为0)?如果我错了,请纠正我。

代码:

public class Index {
    static char c;
    public static void main(String[] args) {
        System.out.println("char default value is: "+Index.c);
    }
}

输出控制台:

enter image description here

3 个答案:

答案 0 :(得分:10)

"十进制数字0和#34;的字符之间存在很大差异。这是U+0030 ...和U+0000,空字符,它是一个控制字符,因此没有打印输出。你打印后者,所以我不希望看到0。

以另一种方式思考,请考虑:

System.out.println("a\u0009b");

您是否希望打印" a9b"?你不应该因为U + 0008是制表符,所以你会看到像" a b"在两者之间有一些可变数量的空格,具体取决于输出设备的作用。

答案 1 :(得分:4)

很久以前,当我年轻的时候,有一种叫ASCII table的东西。 那时候,只有128个不同的数字表示,例如'a'或'@'或某种类型的行为要在终端中完成。

但即使在那时'0'字符的小数值为48。

现在事情有点变化,现在我们有Unicode,UTF-8,UTF-16等。

但故事并没有太大改变,因为每个字符都有一个代码,代表给定编码中的字符。

您可能已经理解'\ u0000'不是字符0

查看UTF-8 table以查看哪个字符是哪个代码。

char zero = '0';
System.out.println(String.format("%d", (int)zero));
System.out.println(String.format("%04X", (int)zero));

<强>更新

@TomBlodget

特别建议对此帖进行一点更新

我们还应该提到ISO-8859-1常见的欧洲编码。哪个能够只用一个字节编码àäöòåèéù和其他字符,前127个字符与US-ASCII相同(为方便起见,通常是这样)。

如何忘记着名的OEM437代码页?这个字符集长时间保留在任何兼容EGA和VGA的显卡核心中的主要字体。

我还要补充说,非常常见的UTF-8编码也包含US-ASCII字符集,但它会将字符编码为两个字节。

答案 2 :(得分:2)

char的默认值为\u0000。即使十进制等值为0,您也不会看到零,就像执行以下操作一样,将打印A而不是65

static char c = 65;
System.out.println(c);

对于您的代码System.out.println(c==0);,它将返回true,因为它们与您提到的相同。