【Java】关于String和StringBuilder
目次和总结
这是为了学习而写的给我的备忘录。
-
- そもそものStringとStringBuilderの違いについて
- StringBuilderのequalsについて
结论是:
– 当需要频繁进行连接和倒置时,建议使用 StringBuilder。
– 其他情况下,使用 String 可能更方便和安全。
– 在使用 String 或 StringBuilder 进行字符串匹配时要注意!
背景 – 背景
我最近正在通过使用AtCoder问题来学习Java的语法。
这个故事始于我遇到ABC146 F -Sugoroku这个问题,想要翻转字符串,然后偶然遇见了一个叫做StringBuilder的工具。
String和StringBuilder的区别
如果你看以下的链接,我认为对于这个问题会更容易理解。
https://qiita.com/shunsuke227ono/items/e8f34c67dcffa0fa28ad
https://www.javadrive.jp/start/stringbuilder/
简单来说,
-
- Stringはイミュータブルであり、StringBuilderはミュータブルである
-
- コード上ではStringもミュータブルのように記述できる(S = S + “a”など)
- 文字列の追加・挿入ではStringBuilderの方がメモリ・時間効率が良い
基于这个原因,似乎建议使用 StringBuilder,但我完全没有体会到 String 的优点,所以我在想,哎?难道 String 是不必要的吗?(也许不是这样的)。
– 2020/02/02 追加資訊 –
(同時更改標題)
感謝留言中的建議並提供↓優秀連結↓。
https://qiita.com/yoshi389111/items/67354ba33f9271ef2c68
如果需要合并字符串常量或在一个语句中合并字符串,似乎使用+运算符没有问题。
如果想要像本例一样翻转字符串,最好使用StringBuilder或List。
追加2(2020/03/27)
因为遇到了不同的问题和见解,所以需要补充说明。
ABC159 B-字符串回文
判断一个字符串是否是回文(+α)。
我用了一个StringBuilder和它的反转来判断代码中的想法是否一样。
static boolean checkKaibun(String str){
StringBuilder t = new StringBuilder(str);
return (t.equals(t.reverse()));
}
根据我的实际试验结果,这个情况始终返回true。原因是StringBuilder的equals方法没有被重写。
1. 重写equals方法。
2. 将其转换为字符串后进行比较。
如果在代码中大量使用StringBuilder的比较,那么选择第一种方式,但也需要覆盖hashCode方法(参考下面),这有点麻烦。
请参考以下链接内容:https://www.atmarkit.co.jp/ait/articles/0702/20/news103.html
在2中的实施如下。
static boolean checkKaibun(String str){
StringBuilder t = new StringBuilder(str);
return (str.equals(t.reverse().toString()));
}