date = date + part vs. date.concat(part)
问题描述:
我有一个小型的Java程序,我正在开发一个项目,它使用JavaMail将用户的收件箱从指定的URI中提取出来,然后开始处理消息。date = date + part vs. date.concat(part)
在Outlook,有一个在属性菜单以设置消息,它增加了(例如)的到期日的函数:
到期日:星期四,2010年1月14日17时00分00秒-0000
到邮件头。
使用javax.mail.Message中的getHeader(String header)方法从电子邮件头中检索它很简单,它返回一个String [],其中恰好是冒号后面的部分,由空格标记。
我想要做的就是把这个String []放到一个String中,以便以后做成Date。因此,建立一个简单的foreach循环如下:
String date = "";
for(String part : header){
date.concat(part);
}
System.out.println(date);
现在,出于某种原因,该代码返回一个空字符串,不完全知道为什么,因为这应该是有效的Java。
但是,下面的代码做的工作,我不知道为什么,因为它似乎不合逻辑我
String date = "";
for(String part : header){
date = date + part;
}
System.out.println(date);
打印出正确的日期。有人能告诉我这是否是正确的做法,如果不是,concat(String append)方法有什么问题?
TIA,
JimiF
答
String
是不可变的。它的内部永远不会从外部改变(抛开思考)。根据API文档,String#concat()
返回一个新的String
包含concatenatred部分,但你忽略它。你需要得到它的手柄,并继续在循环使用它:
String date = "";
for(String part : header){
date = date.concat(part);
}
System.out.println(date);
这就是说,你的第二个例子,也可以简化为:
String date = "";
for(String part : header){
date += part;
}
System.out.println(date);
这反过来说,在现实世界你想使用这个StringBuilder
节省内存,因为在循环中构建新的String
如果你这样做往往是不便宜:
StringBuilder date = new StringBuilder();
for(String part : header){
date.append(part);
}
System.out.println(date.toString());
+1耶为'StringBuilder'!如果调用'PrintWriter'方法,则不需要调用'toString';它为你处理。 :-) – 2010-01-15 01:06:42
Doh ....现在我觉得自己像一个白痴....我现在可以看到我做错了什么。谢谢您的帮助! – JimiF 2010-01-15 01:08:39