StringBuilder str = new StringBuilder("Hello ");
System.out.println(str);
System.out.println(System.identityHashCode(str));
str.append("Java");
System.out.println(str);
System.out.println(System.identityHashCode(str));
str.append(", crazyit.org");
System.out.println(str);
System.out.println(System.identityHashCode(str));
输出结果:
Hello
2046136590
Hello Java
2046136590
Hello Java, crazyit.org
2046136590
复合赋值运算的陷阱:
short sValue = 5;
sValue = sValue - 2;
编译通不过。因为sValue-2表达式的类型将自动提升为int类型,所以程序将一个int类型的值赋给short类型时导致编译错误。
但是上述代码修改为
short sValue = 5;
sValue -= 2;
则不会编译错误。
复合赋值运算符含有自动强制类型转换。
上述代码即为:sValue = (short) sValue - 2;
存在的问题是:可能在强制转换过程中。存在高位截去,造成数据的损失。
String 类型的+=运算符左边的变量只能是String类型,而不可能是String的父类型(如:Object 或者 CharSequence)