【问题标题】:Why are the default values of char, double and float printed like that?为什么 char、double 和 float 的默认值会这样打印?
【发布时间】:2018-04-15 08:38:17
【问题描述】:

我一直在试图找出 为什么我在打印一个使用默认值 '\u0000' 初始化的 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 的默认值打印为 ' '。对于浮点数是 "0.0",对于双精度数是 "0.0"。简而言之,我的问题是: 为什么我得到一个 ' ' 而不是 '\u0000' 或 null(或类似的东西)作为 char?为什么不打印 float 和 double 的默认值中存在的后缀? (如 "0.0f""0.0d"

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

【问题讨论】:

  • 那些后缀在java代码之外没有意义,所以当你打印值时,后缀不会出现。 "\u" 前缀也是如此,当你打印一个 char 值时,你实际上是在打印相应的字符(顺便说一下,默认字符值 '\u0000' 不为空,并且是一个不可打印的字符,给出不同的输出取决于您的系统:空的,方形的..)。
  • @Berger 感谢后缀背后的原因,所以这意味着这些将永远不会在执行时打印?如果('\u0000')它是不可打印的,那么为什么有''为什么根本没有''?
  • 是的,后缀永远不会打印到控制台、文件或套接字,它们是 java 代码的内部内容,仅此而已。不可打印的字符以不同的形式表示,但是如果您尝试打印一个,系统应该输出一些东西,“东西”将取决于平台,但它不应该忽略你的打印,即使它无法正确显示它..
  • 所以,这意味着在不同的平台上,我将得到不同的输出,因为它是不可打印的字符 char('\u0000') 的默认值?
  • 确切地说,每个系统将决定如何显示不可显示的字符。如果有意义的话:)

标签: java floating-point char default-value


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    我现在想到的事情:

    1. 在您的代码中,您错过了 Check 类的最后一个“}”。

    2. 您是否尝试过仅打印

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

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

    3. 1234563使其成为'',与float和double值的格式相同。 在上下文中就像打印一个\n,你不能因为解释为一个分号。

    【讨论】:

    • (1) 不是答案。 (2) 没有区别。 (3) 是无可救药的困惑,而“因为解释为分号”是没有意义的。答案充满了“可能”和“可能”,即猜测。
    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2011-01-19
    相关资源
    最近更新 更多