众所周知,String
在Java中是不可变的。我有以下方法的正文返回String
:
Partner partner = context.getComponent(ComponentNames.PARTNER_COMPONENT_NAME);
String lastAccesDate = partner.getLastAccessDate();
if(lastAccesDate == null) {
return "";
}
lastAccesDate = new SimpleDateFormat(DATE_PATTERN).format(); //1
return lastAccesDate;
事情是由于字符串不变性,将在//1
创建一个新的String对象,所以实际上我将有两个String对象,第一个包含partner.getLastAccessDate();
,第二个包含new SimpleDateFormat(DATE_PATTERN).format();
{{1}} 1}}。开销不好,我该怎样避免呢?
答案 0 :(得分:1)
在多线程的情况下使用StringBuffer
(即,如果您需要线程安全,可变的字符序列),否则使用StringBuilder
答案 1 :(得分:0)
当你将第二个时间字符串分配给String对象lastAccessDate时,没有任何开销,因为自动垃圾收集器将释放第一个对象占用的空间,因为没有对象引用相同的空间。所以不用担心开销