企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## [字符串运算符](https://lingcoder.gitee.io/onjava8/#/book/04-Operators?id=%e5%ad%97%e7%ac%a6%e4%b8%b2%e8%bf%90%e7%ae%97%e7%ac%a6) 这个运算符在 Java 里有一项特殊用途:连接字符串。这点已在前面展示过了。尽管与`+`的传统意义不符,但如此使用也还是比较自然的。这一功能看起来还不错,于是在 C++ 里引入了“运算符重载”机制,以便 C++ 程序员为几乎所有运算符增加特殊的含义。但遗憾得是,与 C++ 的一些限制结合以后,它变得复杂。这要求程序员在设计自己的类时必须对此有周全的考虑。虽然在 Java 中实现运算符重载机制并非难事(如 C# 所展示的,它具有简单的运算符重载),但因该特性过于复杂,因此 Java 并未实现它。 我们注意到运用`String +`时有一些有趣的现象。若表达式以一个**String**类型开头(编译器会自动将双引号`""`标注的的字符序列转换为字符串),那么后续所有运算对象都必须是字符串。代码示例: ~~~ // operators/StringOperators.java public class StringOperators { public static void main(String[] args) { int x = 0, y = 1, z = 2; String s = "x, y, z "; System.out.println(s + x + y + z); // 将 x 转换为字符串 System.out.println(x + " " + s); s += "(summed) = "; // 级联操作 System.out.println(s + (x + y + z)); // Integer.toString()方法的简写: System.out.println("" + x); } } ~~~ 输出结果: ~~~ x, y, z 012 0 x, y, z x, y, z (summed) = 3 0 ~~~ **注意**:上例中第 1 输出语句的执行结果是`012`而并非`3`,这是因为编译器将其分别转换为其字符串形式然后与字符串变量**s**连接。在第 2 条输出语句中,编译器将开头的变量转换为了字符串,由此可以看出,这种转换与数据的位置无关,只要当中有一条数据是字符串类型,其他非字符串数据都将被转换为字符串形式并连接。最后一条输出语句,我们可以看出`+=`运算符可以拼接其右侧的字符串连接结果并重赋值给自身变量`s`。括号`()`可以控制表达式的计算顺序,以便在显示**int**之前对其进行实际求和。 请注意主方法中的最后一个例子:我们经常会看到一个空字符串`""`跟着一个基本类型的数据。这样可以隐式地将其转换为字符串,以代替繁琐的显式调用方法(如这里可以使用 \*\*Integer.toString()\*\*)。