简体   繁体   English

java中System.out.print()中的“+”连接操作是否消耗内存?

[英]Does "+" concatenation operation in java in System.out.print() consume memory?

I am having a doubt regarding the usage of String and String Builder in Java.我对 Java 中 String 和 String Builder 的使用有疑问。 I am using Java 1.8我正在使用 Java 1.8

Version one :版本一:

System.out.println("ServerSocketTimeOut = " + serversocketTimeout + " ReadTimeOut = " + readTimeout  + " SleepDelay =" + sleepDelay);

Version Two:-第二版:-

StringBuilder viewString= new StringBuilder("ServerSocketTimeOut = ");
viewString.append(serversocketTimeout).append(" ReadTimeOut = ")
                        .append(readTimeout).append("SleepDelay =").append(sleepDelay)

Shall I gain any performance in terms of memory as StringBuilder is mutable?由于 StringBuilder 是可变的,我是否应该在内存方面获得任何性能?

Version_1 vs Version_2 ?? Version_1 与 Version_2 ??

In java 1.6+ probably the optimizer will make the performances of your two versions equal.在 java 1.6+ 中,优化器可能会使您的两个版本的性能相同。

But keep in mind, in more complex concatenation you could have actually better performance with StringBuilder.但请记住,在更复杂的串联中,您实际上可以使用 StringBuilder 获得更好的性能。 (read for instance Java: String concat vs StringBuilder - optimised, so what should I do? ) (例如阅读Java: String concat vs StringBuilder - 优化,那我该怎么办?

If I was you I would consider too delegating to some logging framework with parameters, ( read for instance Built-in string formatting vs string concatenation as logging parameter )如果我是你,我会考虑过多地委托给一些带有参数的日志框架,(例如,读取内置字符串格式与字符串连接作为日志参数

Here a brief example of possible "version 3"这是可能的“版本 3”的简要示例

LOGGER.info("ServerSocketTimeOut = {} ReadTimeOut = {} SleepDelay = {}", serversocketTimeout, readTimeout, sleepDelay); LOGGER.info("ServerSocketTimeOut = {} ReadTimeOut = {} SleepDelay = {}", serversocketTimeout, readTimeout, sleepDelay);

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

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