IT Notes‎ > ‎Java‎ > ‎Java Language‎ > ‎《Java 解惑》笔记‎ > ‎

Puzzle 10: Tweedledee

复合赋值符和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, ";
就不能通过编译了.



  1. JLS 5.2 Assignment Conversion
  2. JLS 15.26.2 Compound Assignment Operators
  3. Puzzle 09: Tweedledum
Comments