Java System.out的Print()与Write()方法

Java System.out的Print()与Write()方法,java,printstream,Java,Printstream,各州的Javadoc 打印一个字符。字符被翻译成一个或多个字节 根据平台的默认字符编码 字节的写入方式与write(int)方法完全相同 所以这意味着下面的代码应该打印2个'a',但是打印一个'a'而不是两个 System.out.print('a'); System.out.write('a'); 有人能帮我理解这种行为吗,就像PrintStream#write 将指定的字节写入此流。如果字节是换行符,则 启用自动刷新后,将调用刷新方法 所以只要调用flush 调用System.out.fl

各州的Javadoc

打印一个字符。字符被翻译成一个或多个字节 根据平台的默认字符编码 字节的写入方式与write(int)方法完全相同

所以这意味着下面的代码应该打印2个'a',但是打印一个'a'而不是两个

System.out.print('a');
System.out.write('a');
有人能帮我理解这种行为吗,就像
PrintStream#write

将指定的字节写入此流。如果字节是换行符,则 启用自动刷新后,将调用刷新方法

所以只要调用
flush

调用
System.out.flush()
System.out.write('a')之后

交替地

正如文档所建议的,将输出流设置为
autoflushable
,然后在程序末尾写入新行字符。事实上,如果查看源代码,PrintStream对象
System.out
已经设置为autoflushable。所以,你所需要做的就是在最后打印一个新的行字符。不需要叫同花顺

System.out.print('a');
System.out.write('a');
System.out.write('\n');

这将打印两个
a
s。您是说在您的情况下,它只打印一个
a
?请尝试刷新…@VHS是..它正在打印一个..:(我不理解这里的反对票。这个问题结构合理,在我的讨论范围之内SO@4castle,您的链接指向PrintWriter类,而不是PrinttStream。这是正确的链接。如果您看到此代码,您将看到print的实现与write的实现不同。这是一个设计决策。是的,但如果我查看pr的文档int()char然后语句是矛盾的。@showstepper在你的问题中没有“
char()
”链接。哦,你是说打印(char)。我已经检查了该链接。它没有说明它需要自动刷新设置为true。@showstepper也不是换行符。
'a'
没有矛盾。您的观点仍然不清楚。@4castle,我会说这是由类设计决定的。java文档清楚地说,刷新是写入所必需的。但它们没有说是打印所必需的。