我有这样的情况:
public String createId(List<String> list)
{
String id="";
if(list.contains("name"))
id+="TEST VALUE NAME";
if(list.contains("age"))
id+="Test Value AGE";
.
.
. likewise many if condition
return id;
}
根据我的理解,我们应该在循环条件中使用StringBuilder,在简单的连接中使用String。所以这里想问我应该使用***String还是StringBuilder***?请建议
4条答案
按热度按时间u5rb5r591#
StringBuilder最适合这种情况,因为它是可变的。String是不可变的,所以当你修改字符串时,它会创建一个新的对象。
au9on6nz2#
对于给定任务,似乎最好通过定义键的 list 以匹配输入列表并使用Stream API生成字符串id(例如,带分隔符或不带分隔符的
Collectors.joining
)来去除多个重复的if
语句。假设有一个规则来创建id的一部分:附加
"Test Value " + key.toUpperCase()
,则实现可能如下所示:如果要为
name
、age
等提供定制部分,则应准备并使用Map
的匹配项,还可以将输入list
转换为Set<String
以便于查找:uelo1irk3#
一般来说,您对何时使用
String
连接和何时使用StringBuilder
连接的理解是正确的。为了提高重复字符串连接的性能,Java编译器可以使用StringBuffer类或类似的技术来减少通过表达式求值创建的中间String对象的数量。
对于大多数情况,您应该使用可读性和可维护性更好的方法。
brvekthn4#
如前所述,StringBuilder是不可变的,而String不是。
此外,当编译器编译字符串连接时,它会将其转换为StringBuilder.String concatenation in toString in Java
另外要记住的是,如果使用Sonar或其他工具进行代码分析,
id+="TEST VALUE NAME";
会增加复杂性。使用StringBuilder不会增加分析工具的复杂性。