我在Java中看不到实例“ char”的默认值

时间:2018-10-07 08:43:26

标签: java variables instance

我发现实例变量“ char”的默认值为“ u0000”(空的unicode)。但是当我尝试下面的代码时,我只能看到一个空的打印行。请给我澄清。

public class Basics {

     char c;
     int x;

     public static void main(String[] args) {
         Basics s = new Basics();

         System.out.println(s.c);
         System.out.println(s.x);
     }   
}

控制台输出如下:

(empty line)
0

3 个答案:

答案 0 :(得分:3)

'\u0000'char c = 0;)是a Unicode control character。您不应该看到它。

System.out.println(Character.isISOControl(s.c) ? "<control>" : s.c);

答案 1 :(得分:1)

尝试

System.out.println((int) s.c);

如果要查看默认值char(即0)的数值。

否则,它只打印空白(不是空行)。

如果您在s.c之后添加可见字符,您会发现它不是空行:

System.out.print ("--->");
System.out.print (s.c);
System.out.println ("<---");

将打印:

---> <---

答案 2 :(得分:1)

  

能否请您提供更多有关为何选择unicode作为char数据类型的默认值的更多信息?这背后有什么具体原因吗?

已经认识到,要成为Java的语言默认需要支持多语言字符集。当时,Unicode是实现它的新标准方式 1 。 Java首次采用Unicode时,Unicode仅使用16位代码。这导致Java设计人员将char指定为无符号16位整数类型。不幸的是,Unicode迅速扩展到超过16位,并且Java必须适应...通过转换为Java的本地内存中文本编码方案UTF-16。

有关更多背景信息:

但是请注意:

  • 在Java的最新版本中,您可以选择启用文本数据的更紧凑表示形式。
  • char的宽度是如此牢固,以至于无法更改。实际上,如果要表示Unicode 代码点,则应使用int而不是char

1-仍然是标准方式。 AFAIK目前没有Unicode的可靠替代品。


选择\u0000作为char的默认初始值的特定原因是因为它为零。默认情况下,通过将所有零字节写入所有字段来初始化对象,而不管其类型如何。对于整数类型和浮点类型,此映射为零;对于false,此映射为boolean;对于引用类型,此映射为null

碰巧\u0000字符映射到ASCII NUL控制字符,这是非打印字符。