黑马程序员技术交流社区

标题: Java赋值运算符总结 [打印本页]

作者: lucascgz    时间: 2015-12-7 22:48
标题: Java赋值运算符总结

赋值运算符
        右结合性, 优先级最低
        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); // 同上
        }
--------------------------------------------------------------------------------

作者: 王晓亮    时间: 2015-12-7 23:04
!!!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2