admin 管理员组

文章数量: 1087947


2024年3月13日发(作者:xml用于什么地方)

Java性能编程规范

1 字符串操作

规则1.1:需要同步的情况下,采用StringBuffer处理字符串拼装。

 说明

编程时,当字符串连接超过3次的情况下,请使用StringBuffer而不是“+”。因为String

是不变(Immutable)对象类,使用“+”会创建新String临时对象,因此增加了创建与回

收临时对象的开销。StringBuffer对象是可变(mutable)对象类,不存在该问题。在JDK1.5

之后,增加了StringBuilder类,在单线程中使用时,StringBuilder的效率要高于StringBuffer。

详见规则1.2。

【示例】

String str = strA + StrB + StrC; //会创建临时对象strA + StrB

可修改为:

StringBuffer strBuf = new StringBuffer(128);

(strA).append(strB).append(strC);

规则1.2:不需要同步的情况下,使用StringBuilder处理字符串拼装。

说明

从 JDK 5 开始,JDK为StringBuffer补充了一个单个线程使用的等价类StringBuilder。

StringBuilder与StringBuffer支持所有相同的操作,不同点在于StringBuilder的方法不是

线程安全的,StringBuffer的方法是线程安全的,因此StringBuilder速度更快。所以,当

不存在线程安全问题时,应该优先使用StringBuilder。

【示例】

String str = strA + StrB + StrC; //会创建临时对象strA + StrB

当不需要考虑线程安全问题时,可修改为:

StringBuilder strBuilder = new StringBuilder(128);

(strA).append(strB).append(strC);

规则1.3: 避免频繁或对大对象使用String类的replaceAll方法。

说明

因为String是不变对象类,对象在执行replaceAll方法时,因为替换操作将创建大量新的

临时对象,这些对象的创建和回收将消耗系统性能。如果要进行这样的操作,考虑使用

Pattern类和Matcher类。

【示例】

Pattern p = e("cat");

Matcher m = r("one cat two cats in the yard");

StringBuffer sb = new StringBuffer();

while (())

{

Replacement(sb, "dog");

}

Tail(sb);

n(ng());

规则1.4: 避免大对象使用默认的toString方法转换为字符串。

说明

【示例】

规则1.5: 不要通过new方式来创建常量字符串。

说明

在java语言中,对于字符串常量,虚拟机会通过常量池机制确保其只有一个实例。常量


本文标签: 对象 字符串 使用 创建 常量