有史以来第一个Java程序输出不正确

有史以来第一个Java程序输出不正确,java,Java,很抱歉提出了一个愚蠢的问题,我正在学习一门新语言并学习以下代码: public class Exercise01 { int i; char c; public static void main(String[] args) { Exercise01 E = new Exercise01(); System.out.println("i = " + E.i); System.out.println("c = [" + E

很抱歉提出了一个愚蠢的问题,我正在学习一门新语言并学习以下代码:

public class Exercise01 {
    int i;
    char c;

    public static void main(String[] args) {

        Exercise01 E = new Exercise01();
        System.out.println("i = " + E.i);
        System.out.println("c = [" + E.c + "]");
    }
}
/* Output:
i = 0
c = [
*/
为什么输出不产生“]”字符?这与Unicode有关吗


PostEdited:变量E.c未出于实验目的进行初始化。

您正试图打印空字符,因为您的
字符c
不需要初始化。i、 e.
\0
有趣的是,您无法轻松复制和粘贴此字符,因为大多数C代码将其视为字符串结束标记

当我运行代码时,我看到了
]

尝试使用更改代码

char c = '?';
给我一个

i = 0
c = [?]

重现此问题的一种方法是在unix上运行

java Main | more
哪个输出

i = 0
c = [

可能是您的程序输出到的地方,控制台或窗口,被E.c.的值U+0000字符弄糊涂了

这对我来说很好


初始化E.c并重试。

可能与E.c未初始化为任何内容有关,我认为这是因为
c
未初始化,因此保留
\0
,即“行尾”。因此,
println
打印到行尾,并且不打印您的

您应该初始化字符C以及int i。良好的代码实践:声明变量后初始化变量非常重要

它是我这边生产的。这就是全部代码吗?它也为我提供了预期的输出。@Sophie,我自己测试了你的代码,我得到了完全符合预期的输出!你为什么不再检查一遍呢?亲爱的各位,谢谢你们的反馈!我意识到Eclipse中的输出是不好的,而在终端中它是好的(正如预期的那样)。下面我们可以看到很好的答案,但是我希望我的问题提醒你们中的许多人,基本类型(作为类字段)确实被初始化为默认值。谢谢:)这不是一个C问题,这是一个java问题,上面的许多用户包括我都说他们得到了预期的输出!问题是
为什么输出不产生“]”字符?
“它适合我”不是答案。与C程序的交互是一个可能的答案。
more
是一个用C编写的程序。使用它或类似的东西可能会导致输出的截断。JLS 4.12.5:
每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9,§15.10):[…]对于类型char,默认值为空字符,即“\u0000”。
是的,这是一个很好的做法,但请查看其他地方的答案。-1 println会打印整个字符串。可能是UI没有正确显示它。