Puzzle 10: Tweedledee
复合赋值符和String
复合赋值符和String
前一个话题也提到了复合赋值符的问题, 这里的问题也和它相关. 但这一次是让:
- x = x + i; 合法
- x += i; 非法.
复合操作符要求所有的操作数都是元数据类型或者对应的封装类型. 但有一个例外, += 允许在左边为String类型时, 右边为任意类型(JLS 15.26.2) .
赋值符=比较picky, 所以用的时候要小心, 要注意表达式右边和左边的类型兼容. (JLS 5.2)
这样的代码是没有问题的:
String a = "hello, ";
Object b = "world!";
int c = 999;
a += b;
a += c;
但如果把第一行改成
Object a = "hello, ";
就不能通过编译了.
附
- JLS 5.2 Assignment Conversion
- JLS 15.26.2 Compound Assignment Operators
- Puzzle 09: Tweedledum