何時可以用 + 拼接字符串,何時不可以用用 + 拼接字符串?

何時可以用 + 拼接字符串,何時不可以用用 + 拼接字符串?


前言

我們做 Java 程序猿/媛 以來,不管是工作當中,還是面試過程中,都知道:字符串拼接不能用 String,要用 StringBuilder 或者是 StringBuffer,以至於它們都被濫用了。

StringBuilder、StringBuffer 簡稱:SB,下文統一用 SB 代替。

SB它們都是可變的字符串,它們之間的區別也是 Java 初中級面試戰場上出現機率十分高的一道題,上場率沒有 90% 也有 80% 吧。

這兩個的具體區別請看這篇文章:爲什麼需要用stringbuffer或者StringBuilder去拼接字符串——而不用string——以及stringbuffer的基本瞭解

字符串拼接一定要用 SB 嗎?爲什麼不能用 + ?能不能用 + ?什麼時候可以用 + ?


什麼時候不能用 +

通過多個表達式完成一個字符串拼接操作。

private void test1() {
    String blog = "https://blog.";
    String str = www;
    str += "csdn.net";
    str += "/Mrs_chens/article/list/14";
}

我們在代碼中拼接了兩次,也就是說每一次拼接操作都會創建一次 StringBuilder。頻繁創建對象是有性能開銷的,這也是爲什麼我們常說的字符串不能用 + 拼接,而要用那兩個 SB 拼接了。


什麼時候可以用 +

直接將三個字面量的字符串拼接成一個字符串。

private static void test2() {
    String str = "https://blog." + "csdn.net/" + "Mrs_chens";
}

直接從常量池進行取出一個完整的字符串:https://blog.csdn.net/Mrs_chens。在這種情況下是可以用 + 號進行字符串拼接的。

當這種拼接操作演變成我們實際工作當中的某個 SQL 語句拼接的案例,如:

String sql = "SELECT name, sex, age, address"
        + "FROM t_user"
        + "WHERE age > 18";

別說這樣不行,這樣是行的。

但你要是換成這樣就不行了:

String sql = "SELECT name, sex, age, address";
sql += "FROM t_user";
sql += "WHERE age > 18";

這樣又回到創建多個 StringBuilder 的時候了。也就是說,在一個表達式中完成字符串拼接是可以用 + 號完成的,因爲編譯器已經做了優化。


總之

你只需要記住這兩點:

  1. 在循環和多個表達式中不能 +,頻繁創建 SB 性能影響;
  2. 在單個表達式中可以用 +,編譯器直接做了優化;

最後

  • 更多參考精彩博文請看這裏:《陳永佳的博客》

  • 喜歡博主的小夥伴可以加個關注、點個贊哦,持續更新嘿嘿!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章