java - Java 中重复字符串值的字符串连接

标签 java string

我有下面两个 JAVA 代码片段,想知道哪个在内存/性能方面更好。

第一个片段:

String s1 = "USER.DELETE";
String s2 = "RESOURCE.DELETE";
String s3 = "ENTITY.DELETE";

第二个片段: 一个静态最终变量

private static final String DELETE = ".DELETE";

然后使用这个变量

String s1 = "USER" + DELETE;
String s2 = "RESOURCE" + DELETE;
String s3 = "ENTITY" + DELETE;

最佳答案

第一种方法将在内存中创建 3 个 String 对象实例。 第二种方法将在内存中创建 4 个 String 对象实例。

性能影响: 从性能的角度来看不会有任何影响,因为字符串连接将在给定场景的编译时完成,因为值是已知的。

Java 规范: 由常量表达式(第 15.28 节)计算的字符串在编译时计算,然后被视为文字。 http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.5

内存影响: 第二种方法会在 java 堆内存空间中创建一个额外的字符串。

从代码可维护性的角度来看,我将采用第二种方法。 假设稍后我们要将 .DELETE 更改为 .ASYNCDELETE。 我们只需要用第二种方法改变一个地方。 但是对于第一种方法,我们必须进行 3 次修改。

关于java - Java 中重复字符串值的字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42089776/

相关文章:

java - 使用 Java 运行多个系统命令

string - 使用Redigo读取作为JSON字符串的Redis键值

mysql - 在mysql中搜索子字符串

java - 生成 Swagger API 的最佳方式?即 codegen 与 swagger 编辑器(Spring Boot API)

java - 尽管确认传递的数据缓冲区足够长,但 glTexSubImage2D() 导致 EXCEPTION_ACCESS_VIOLATION (0xc0000005)

php - 从iOS到PHP的特殊字符和表情符号

javascript - 如何编写 Regex 来替换一些单词并在 JavaScript 中缺少时添加 ""。意外行为

c++ - 错误 : invalid operands of types ‘const char [35]’ and ‘const char [2]’ to binary ‘operator+’

java - 如何将 double 转换为适合表示英寸的格式的分数?

java - 使用扫描器类在Java中获取用户输入数组