【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()));
}
广告
将在 10 秒后关闭
bannerAds