String
是Java中的一个特例。这是一个类,我可以在source code中检查它,但它也有自己的中缀运算符+
,它似乎是StringBuilder
的语法糖。
例如,
"Hello " + yourName;
可能会成为
new StringBuilder().append("Hello ").append(yourName).toString();
Java中没有用户定义的运算符,那么为+
指定的String
在哪里?
是否可以使用相同的机制来制作其他运算符,例如向量?
答案 0 :(得分:44)
+
在java 编译器中实现。编译器用编译时常量或String
代码替换 String
+ StringBuilder
。请注意,这也适用于基元。即,int i=1+2
可以在编译期间直接替换为int i=3
。
答案 1 :(得分:23)
您可以查看规格。编译器具有它的实现,而不是Java源代码。
Java Language Specification- 15.18.1. String Concatenation Operator +
实现可以选择在一个步骤中执行转换和连接,以避免创建然后丢弃中间String对象。为了提高重复字符串连接的性能,Java编译器可以使用StringBuffer类或类似技术来减少通过计算表达式创建的中间String对象的数量。
它显示了实现取决于编译器的证据。
答案 2 :(得分:1)
至于语言,不,它不可扩展。这是特定的行为,没有其他类扩展+
运算符。
至于完成此操作的位置,请在以下文件中搜索string_add
(not a real JVM op):
至于为什么,Java被认为是简单的,或者至少比C ++简单,并且像字符串操作这样的基本内容是强制性的。但是,运算符重载会增加复杂性。