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

时间:2011-07-13 21:05:39

标签: java performance newline readability

假设我想打印5行。哪种方法最佳(性能和可读性)。

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

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

这是一个偏好的问题还是比另一个更好的问题。看起来使用第二种方法可以节省大量时间。

8 个答案:

答案 0 :(得分:29)

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

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


关于表演的主题,以及为什么每个人似乎都说“已经足够”。

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

作为一般规则,专业软件工程师认为,如果不需要更快,就不值得花时间更快地制作东西。而肯定不值得花费客户的钱来做这件事。

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

那你怎么知道何时进行优化?

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

您如何知道 要优化?

  • 运行应用程序分析器,并分析其输出以查看实际性能热点和瓶颈的位置。

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

答案 1 :(得分:8)

或许比其中任何一个更好:

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

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

答案 2 :(得分:0)

第二个肯定是代码更少,性能明智你可能没有看到差异,但后者可能更快,因为它只有1个呼叫,但它可以忽略不计。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

从答案中可以看出,这是一个偏好问题。您提供的示例非常简单,其中性能增益和可读性问题最小。然而,在一些更复杂的情况下,选择哪些看似等效的方法可能会严重破坏您的代码,或者使其难以被邻居理解。

如果代码看起来有点混乱,请尝试抽象出凌乱的代码并为其提供易于阅读的方法名称。

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

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

答案 5 :(得分:0)

对于平台相关的行分隔符,我会使用:

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

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

答案 6 :(得分:0)

什么将是输出 System.out.println(“ \ /”);

如果输出为/,那么背后没有给出\ /的原因是什么?

答案 7 :(得分:-1)

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

它不仅对程序员来说更容易,而且可以减少函数开销。