我看不到Java中"char"实例的默认值是什么。

4
我发现实例变量“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

请输出Java中的Unicode字符。 - theRiley
控制图片字符可供替换,这使它们易于阅读,但当然会改变文本。␀。注意:该行可能在您看来是空的,但实际上并不是。将其发送到文件并查看字节。 - Tom Blodget
3个回答

3

'\u0000' (char c = 0;)是Unicode控制字符。它不应该被显示出来。

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

你想要下划线这个吗?Character.isDigit() - 不。 - Guna Yuvan
1
@GunaYuvan '\u0000' 不是数字 - Andrew Tobilko
请问您能否提供更多关于为什么Unicode被选为char数据类型的默认值的信息?这背后是否有特定的原因? - Guna Yuvan
@GunaYuvan 看看这个回答:https://dev59.com/oFoV5IYBdhLWcg3wc-cm#36236799 - Andrew Tobilko
2
@GunaYuvan 即使他们使用 ASCII 而非 Unicode,字符 0x00 仍然是无法打印的控制字符。 - Mark Rotteveel

1
尝试。
System.out.println((int) s.c);

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

否则,它只会打印一个空格(而不是空行)。

如果您在s.c之前或之后添加可见字符,就可以看到它不是空行:

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

将会打印出以下内容:
---> <---

1
请您告诉我,为什么Unicode被选作char数据类型的默认值?是否有特定原因?在Java开发之初,就已经认识到需要支持多语言字符集。当时Unicode是新的标准方式1。Java采用Unicode时,Unicode仅使用16位代码。这导致Java设计者将char指定为无符号16位整型。不幸的是,Unicode迅速扩展到超过16位,Java不得不适应……通过切换到UTF-16作为Java内存中的本地文本编码方案。更多背景信息,请参见以下内容:但请注意:
  • 在最新版本的Java中,您可以选择启用更紧凑的文本数据表示方式。
  • char的宽度是固定的,无法更改。实际上,如果要表示Unicode 代码点,应该使用int而不是char

1 - Unicode仍然是标准方式。据我所知,目前没有可靠的Unicode替代品。


"

char

的默认初始值选择\u0000的具体原因是因为它等于零。无论类型如何,对象都会通过将所有字段写入所有零字节来进行默认初始化。这映射到整数类型和浮点类型的零,boolean类型的false,以及引用类型的null

恰好\u0000字符映射到ASCII NUL控制字符,这是一个不可打印的字符。

"

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