某天下午,松师傅在写他的 Jvav 作业,其中有一道题:
String s4 = "Wel" + "come"; String s5 = "Wel"; String s6 = "come"; String s7 = s5 + s6;
表达式
s4 == s7
的结果为?
答案是 false
。
这让松师傅摸不着头脑了,字符串 s4
和 s7
这两种拼接方式有啥区别呢?
此时一位世外高人点拨他:
原来使用 +
号拼接字符串时,编译器会进行优化,创建一个 StringBuilder
对象,然后调用 append
方法,最后调用 toString
方法,例如:
String jeremy = "Jeremy";
String tsai = "Tsai";
String jeremytsai = jeremy + tsai;
会被编译为:
String jeremytsai = new StringBuilder().append(jeremy).append(tsai).toString();
而对于字符串常量的拼接,编译器会直接进行优化,合并为一个完整的字符串,并在字符串常量池中查找是否已经存在拼接好的字符串,返回一个字符串常量池的地址:
String s = "Wel" + "come";
实际上是:
String s = "Welcome";
拓展
其他的字符串拼接方式:
- 使用
String.concat(String str)
方法 - 使用
StringBuilder
拼接字符串
April 8th, 2024 at 08:37 pm
松师傅牛啊!(解答了我错了的问题)