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