何時可以用 + 拼接字符串,何時不可以用用 + 拼接字符串?
前言
我們做 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 的時候了。也就是說,在一個表達式中完成字符串拼接是可以用 + 號完成的,因爲編譯器已經做了優化。
總之
你只需要記住這兩點:
- 在循環和多個表達式中不能 +,頻繁創建 SB 性能影響;
- 在單個表達式中可以用 +,編譯器直接做了優化;
最後
-
更多參考精彩博文請看這裏:《陳永佳的博客》
-
喜歡博主的小夥伴可以加個關注、點個贊哦,持續更新嘿嘿!