繁体   English   中英

Java 中的 System.out.println() 与 \n

[英]System.out.println() vs \n in Java

假设我想打印 5 行。 这是最好的方法(性能和可读性)。

System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();

或者

System.out.println("\n\n\n\n");

这是一个偏好问题还是一个比另一个更好。 使用第二种方法似乎会节省很多时间。

两者之间存在功能差异。 第一个版本使用平台的首选行分隔符输出换行符。 第二个版本输出换行符,这在 Windows 或 Mac OS 上可能不合适。

这比任何真实的或想象的性能优势都更重要。


关于性能的话题,以及为什么每个人似乎都在说“已经够了”。

您编写该代码的两种方式之间的性能差异可能只有几微秒或更短。 换句话说,最终用户不会注意到差异......除非代码被执行数百万次。

作为一般规则,专业软件工程师认为,如果不需要更快,则不值得花时间加快速度。 而且花客户的钱做这件事当然不值得。

如果您有明确的证据表明存在或将存在性能问题,并且您将要优化的代码是真正的问题所在/将要出现的地方,那么您应该只沉迷于微优化。 花在优化错误代码上的时间是浪费时间。

那么你怎么知道什么时候优化呢?

  • 当根据实际重要的标准衡量时,应用程序明显变慢。

你怎么知道要优化什么?

  • 通过运行应用程序分析器,并分析它们的 output 以查看实际的性能热点和瓶颈在哪里。

性能并不总是一个不重要的问题。 事实上,对于某些类型的软件,不考虑性能和可扩展性要求的设计或实现可能是一场彻底的灾难。 但是,大多数软件并非如此。

也许比任何一个都好:

System.out.printf("%n%n%n%n%n");

这使用适合您平台的行分隔符,而"\n"则没有。

对于依赖于平台的行分隔符,我将使用:

String ls = System.getProperty("line.separator");
System.out.print(ls+ls+ls+ls+ls);

这应该适用于win,linux或mac。

System.out.println("\ /") 的 output 将是什么;

如果 output 是 /,那么它不输出 \ / 的原因是什么?

第二个绝对是更少的代码,在性能方面你可能看不到差异,但后者可能更快,因为它只有 1 次调用,但可以忽略不计。

第二个选项几乎肯定更快,因为每次调用 println() 都会导致调用系统 function。 跳转到 kernel 代码需要一些时间。 这就是在 C 中缓冲的原因。

从答案中可以看出,这是一个偏好问题。 您给出的示例是一个非常简单的示例,其中性能提升和可读性问题很小。 然而,在一些更复杂的情况下,选择使用哪些看似等效的方法可能会削弱您的代码,或者可能使邻居无法辨认。

如果代码看起来有点乱,试着抽象出乱七八糟的代码并给它一个易于阅读的方法名称。

所以是的,这是一个偏好问题。

(编辑:不,这显然不是偏好问题(^o^)//)

第二种选择是更好的方法。

这不仅对程序员来说更容易,而且导致更少的 function 开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM