为什么 char、double 和 float 的默认值打印成这样?

Why are the default values of char, double and float printed like that?

我一直在尝试找出 当我打印一个使用默认值 [=12] 初始化的 char 变量时,为什么我得到 ' ' =]?

我也知道 float 和 double 有一个 default value of "0.0f" and "0.0d",但是当我打印它们的默认值 时,不会打印后缀 "f" 和 "d"。 那么为什么这些后缀没有打印值?

代码如下:

class Check{
    char c;
    float f;
    double d;

    public static void main(String a[]) {
        Check obj = new Check();
        System.out.println("Default value of char : " + obj.c);
        System.out.println("Default value of float : " + obj.f);
        System.out.println("Default value of double: " + obj.d);
    }
}

在代码中,char 的默认值打印为“”。对于 float,它是 "0.0",对于 double,它是 "0.0"。简而言之,我的问题是: 为什么我得到的是 ' ' 而不是 '\u0000' 或 char 的 null(或类似的东西)?为什么不打印 float 和 double 默认值中存在的后缀? (比如 "0.0f""0.0d"

注意:还有其他问题,例如:Primitives/Objects Declaration, default initialization values and what's the default value of char?,但与我的问题不同,这些问题仅讨论它们的默认值,而不讨论打印它们。

我现在想到的事情:

  1. 在您的代码中您错过了最后的“}”,用于 class 检查。

  2. 你试过打印吗

    System.out.println(obj.c); // Without the String
    

    添加字符串可能会读取 null ass a '' 和 d 和 f 作为格式的一部分,因此它只打印 0.0。

  3. 当您为某些值打印 ascii 代码时 java 编译器将其读取为预期值,我的意思是当您打印 char 时它可能会打印“\u0000” , 但当编译器读取它时,他将其设为 '',与 float 和 double 值的格式相同。 在上下文中就像打印 \n,你只是不能因为被解释为分号。

这些后缀在 java 代码之外没有任何意义,因此它们永远不会打印到控制台、文件或 Socket.

“\u”前缀也一样(java确实内部使用Unicode),当你打印一个char值时,你实际上是在打印相应的字符.

默认 character'\u0000' 不为空,并且是不可打印的字符,根据您的系统给出不同的输出:空,a正方形...

如果你尝试打印一个,系统应该输出一些东西,'something' 将取决于平台,但它不应该忽略你的打印,即使它无法显示正确。