黑马程序员技术交流社区

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

作者: lucascgz    时间: 2015-12-6 19:34
标题: Java 算术运算符总结

算术运算符
--------------------------------------------------------------------------------
1.        取模运算% (只需要记住3个字: 取余数)
        (1)左边小于右边,结果为左边
        (2)左右相等,结果为0
        (3)右边为1,结果为0
        (4)出现负数,则只看左边(左边为正,结果为正; 左边为负,结果为负)
        (5)*** 取模结果的符号始终与左边相同
       
        // (1)左边小于右边,结果为左边s
        System.out.println(10 % 15); // 10

        // (2)左右相等,结果为0
        System.out.println(10%10); // 0

        // (3)右边为1,结果为0
        System.out.println(3%1); // 0

        // (4)出现负数, 则只看左边(左边为正, 结果为正: 左边为负, 结果为负.
        // (5)*** 取模结果的符号始终与左边相同
        System.out.println(-8%3); // -2
        System.out.println(8%(-3)); // 2
--------------------------------------------------------------------------------
2.        自增++和自减--

        例如, int a = 3, b;
                若b = a++; 则a,b的值为多少?        //a = 4, b = 3。
                若b = ++a; 则a,b的值为多少?        //a = 4, b = 4。
       
        分析: ++结合性从右向左,=结合性从右向左,++优先级高于=
                (1)        b = a++; 先赋值再自加
                        ++右边无变量,但=右边有变量,先进行=运算;
                (2)        b = ++a; 先自加再赋值
                        ++右边有变量,先进行++运算,再进行=运算
       
        ***总结:
                前缀++/--, 先自增自减
                后缀++/--, 后自增自减
       
        ***原理:
                前缀++/--, 就是将变量的值自增/自减;
                后缀++/--, 操作时先拷贝变量的值, 然后变量自增/自减, 再返回拷贝值作为表达式的值
                例外: 不管前缀++/--, 还是后缀++/--, 其底层原理都包含了强制类型转换
        -------------------------------------
        int a = 10;
        System.out.println(a++); // 10. 因 a++ 表达式的值为10, 而 a 的值为11
        -------------------------------------
        int a = 10;
        int b = 10;
        int c = 10;
        a = b++; // a=10, b=11
        c = --a; // c=9, a=9
        b = ++a; // b=10, a=10
        a = c--; // a=9, c=8
        -------------------------------------
        int x = 4;
        int y = (x++) + (++x) + (x*10); // 70
        x的值           5          6                   6
        表达式的值 4      6                   60
        -------------------------------------
        下面语句, 哪句会报错?
        byte b = 10;
        b++;        // 不会报错. 底层会进行强制转换 b = (byte)(b+1);
        b = b + 1; // 报错. 右边运算结果为 int 型, 而左边为 byte 型
        -------------------------------------
        int a = 10;
        a = a++;
        System.out.println(a); // 10
        /*
        考查++/--运算符的底层原理:
                前缀++/--, 就是将变量的值自增/自减
                后缀++/--, 操作时先拷贝变量的值, 然后变量+1/-1
        */
        -------------------------------------
        int a = 10;
        int b = (a++) + (a++) + (a++); // a=13, b=33
        a 的值         11                  12          13
        表达式值 10                  11          12
        /*
        分析: 代码总是自上而下, 从左往右执行
        (只有一小部分才考虑运算符的右结合性, 如一元运算符, 三元运算符, 赋值运算符;
        但总的方向还是从左向右的)
        */
--------------------------------------------------------------------------------
3.        运算符“+”(正号/加运算符/字符串相加)
                正号                                “+”                ->        单目运算符
                加运算符                        “+”                ->        双目运算符
                字符串相加运算符        “+”                ->        双目运算符
        注意:
                字符串数据和任何数据使用+相连接, 最终都会变成字符串.

        如
                System.out.println("5+5="+5+5);                        //结果: 5+5=55
                int a=3, b=4;
                System.out.println("a="+a+",b="+b);                //结果:        a=3,b=4

                System.out.println(1+2+"java"+3+4);                //结果:3java34.
                /*
                分析: 代码总是自上而下, 从左往右执行
                        所以, 先做加法运算, 再做字符串连接操作
                        第1个"+"是 Additive Operators (+ and -) for Numeric Types
                        后面的3个"+"是 String Concatenation Operator
                总结: 字符串前的那个"+"和字符串后的所有"+"都是 String Concatenation Operator
                */
--------------------------------------------------------------------------------




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