gpt4 book ai didi

java - date = date + part 与 date.concat(part)

转载 作者:行者123 更新时间:2023-11-29 06:23:23 26 4
gpt4 key购买 nike

我有一个正在为项目开发的小型 Java 程序,它使用 JavaMail 从指定的 URI 中提取用户的收件箱,然后开始处理消息。

在 Outlook 中,属性菜单中有一个功能可以设置邮件的到期日期,它添加(例如):

到期日:2010 年 1 月 14 日星期四 17:00:00 -0000

到邮件标题。

使用 javax.mail.Message 中的 getHeader(String header) 方法从电子邮件 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,

吉米夫

最佳答案

String 是不可变的。它的内部永远不会从外部改变(抛开反射)。根据 API 文档,String#concat() 返回一个包含连接部分的新String,但您忽略了它。您需要获取它的句柄并在循环中继续使用它:

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());

关于java - date = date + part 与 date.concat(part),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2068680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com