我想知道当您尝试打印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);
}
}
输出控制台:
答案 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
,因为它们与您提到的相同。