Java源代码中为字符串实现了`+`在哪里?

时间:2015-09-22 10:10:40

标签: java string operators string-concatenation

String是Java中的一个特例。这是一个类,我可以在source code中检查它,但它也有自己的中缀运算符+,它似乎是StringBuilder的语法糖。

例如,

"Hello " + yourName;

可能会成为

new StringBuilder().append("Hello ").append(yourName).toString();

Java中没有用户定义的运算符,那么为+指定的String在哪里?

是否可以使用相同的机制来制作其他运算符,例如向量?

3 个答案:

答案 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 ++简单,并且像字符串操作这样的基本内容是强制性的。但是,运算符重载会增加复杂性。