赋值运算符
右结合性, 优先级最低
Simple Assignment Operator
Compound Assignment Operators // 必要时自动完成强制类型转换
--------------------------------------------------------------------------------
1. 普通赋值运算符 =
作用: 仅把右边赋值给左边
Simple Assignment Operator
例如:
short s = 4;
s = s + 5; // 编译失败. 运算结果为 int, 接收变量为 short
/*
有整型参与的二元运算, 表达式中 s 被提升为 int 型, 运算结果为 int 型,
而接收结果的变量 s 为 short 型, int 型无法赋值为 short 型(面试)。
2次运算, 先运算再赋值.
*/
--------------------------------------------------------------------------------
2. 复合赋值运算符 += -= *= /= %= &= |= ^= ~= <<= >>= >>>=
Compound Assignment Operators
作用: 把左右两边运算的值赋给左边, 必要时自动完成强制类型转换
例如:
short s = 4;
s += 5; //编译通过. 运算结果为 int, 接收变量为 short
/*
+= 运算符赋值时自动完成强制转换操作(面试)。
1次运算.
*/
--------------------------------------------------------------------------------
3. 自动类型提升/强制类型转换/赋值运算符示例
3.1 示例1
如 byte b=3;
b = b+2; // 编译错误(测试版本: jdk1.8)
// 运算结果为 int 型, 赋值语句语法错误, 需强转.
改进1 -> 加强制转换
byte b=3;
b = (byte)(b + 2);
改进2 -> 使用带强制转换的赋值运算符
byte b=3;
b += 2;
--------------------------------------------------------------------------------
3.2 示例2
如 byte b = 1;
b = b + b; // 编译错误(测试版本: jdk1.8)
// 运算结果为 int 型, 赋值语句语法错误, 需强转.
改进1 -> 加强制转换
byte b=3;
b = (byte)(b + b);
改进2 -> 使用带强制转换的赋值运算符
byte b=3;
b += b;
--------------------------------------------------------------------------------
3.3 示例3
如 byte b=-6;
b = b>>>1; // 编译错误, 需强转. 测试版本: jdk1.8
/*
运算结果为 int 型, 赋值语句语法错误, 需强转.
*/
改进1 -> 加强制转换
byte b=-6;
b = (byte)(b >>> 1);
改进2 -> 使用带强制转换的赋值运算符
byte b=-6;
b >>>= 1;
--------------------------------------------------------------------------------
3.4 示例4
short num = -6
// byte num = -6;
while (num! = 0) // 当num为负时死循环
{
/*
>>> 时, num 被自动类型为 int 型, 高24位/16位补符号位,
每次 >>> 时是对 int 型的最高位补0, 而不是强转后的 byte 型,
强转为 byte 型后最高位还是符号位, 而不是0.
这样, 当 num 初始值为负时, 将死循环.
*/
num >>>= 1;
// num = (short)(num>>>1); // 同上
// num = (byte)(num>>>1); // 同上
}
int num = -6;
// short num = -6;
// byte num = -6;
while (num! = 0) // 当num为负时死循环
{
num >>>= 1L; // 同上
// num = (int)(num>>>1L); // 同上
// num = (short)(num>>>1L); // 同上
// num = (byte)(num>>>1L); // 同上
}
--------------------------------------------------------------------------------
|
|