今天看到《java编程思想》中的运算符优先级助记口诀,不过“Ulcer Addicts Really Like C A lot”在中文语境下不好记。我试着写一个口诀:
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 Java运算符分为以下几种: ➤算术运算符:+,-,*,/,%,++,-- ➤赋值运算符:= ➤扩展后的赋值运算符:+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,>>>= ➤位运算符:&,|,~,^,<<,>>,>>> ➤比较运算符:>,>=,<,<=,== ➤逻辑运算符:&&,&,||,|,!,^ ➤三目运算符:? :
一、算术运算符 1)+:加法运算符 例如如下代码: int a = 1; int b = 2; int sum = a+b; //sum的值为3 System.out.println(sum); 另外,+还可以作为字符串的连接运算符。 2)-:减法运算符 例如如下代码: int a = 3; int b = 2; int sub = a-b; //sub的值为1 System.out.println(sub); 3)*:乘法运算符 例如如下代码: int a = 5; int b = 6; int multiply = a*b; //multiply 的值为30 System.out.println(multiply ); 4)/:除法运算符 例如如下代码: int a = 10; int b = 5; int div = a/b; //div的值为2 System.out.println(div); 注:如果除法运算符的两个操作数都是整数类型,则计算结果为整数,除数不可以为0,否则会引发异常;如果除法运算符的两个操作数中至少一个是浮点数,则计算结果也是浮点数,此时除数可以为0或0.0,得到的结果是正无穷大或负无穷大。 5)%:求余运算符(取模运算符) 例如如下代码: int a = 10; int b = 3; int mod = a%b; //mod 的值为1 System.out.println(mod ); 注:求余运算符的结果不一定总是整数。如果求余运算符的两个操作数都是整数,则第二个操作数不能为0(同除法运算规则);如果求余运算符的两个操作数中至少一个是浮点数,则第二个操作数可以是0或0.0,但求余结果是是非数:NaN。 6)++:自加运算符 ++自加运算符是单目运算符(一元运算符),只有一个操作数。运算符既可以放在操作数的左边也可以放在操作数的右边。如果把++放在左边,则先把操作数加1,然后再运算;如果把++放在右边,则先运算,然后再把操作数加1。 自加运算符放在操作数左边的代码: int a = 2; int b = ++a + 3; //a先自加,然后再执行算术运算 System.out.println(a); //a的值为3 System.out.println(b); //b 的值为6 自加运算符放在操作数右边的代码: int a = 2; int b = a++ + 3; //a先执行算术运算,再自加 System.out.println(a); //a的值为3 System.out.println(b); //b 的值为5 7)--:自减运算符 --自减运算符也是单目运算符(一元运算符),只有一个操作数。用法与++类似,只是将操作数的值减1; 注:自加和自减只能用于操作变量,不能用于操作数值直接量、常量或表达式。例如3--是错误的! 二、赋值运算符 赋值运算符用于为变量指定变量值。 例如 String str = "java"; //为变量str赋值java 三、扩展后的赋值运算符 ● +=:对于a+=b,即对应于a=a+b。 ● -=:对于a-=b,即对应于a=a-b。 ● *=:对于a*=b,即对应于a=a*b。 ● /=:对于a/=b,即对应于a=a/b。 ● %=:对于a%=b,即对应于a=a%b。 ● &=:对于a&=b,即对应于a=a&b。 ● |=:对于a|=b,即对应于a=a|b。 ● ^=:对于a^=b,即对应于a=a^b。 ● <<=:对于a<<=b,即对应于a=a<<b。 ● >>=:对于a>>=b,即对应于a=a>>b。 ●>>>=:对于a>>>=b,即对应于a=a>>>b。 四、位运算符 ● &:按位与。当两位同时为1时才返回1。 ● |:按位或。只要有一位为1就返回1。 ● ~:按位非。单目运算符,将操作数的每一位(包括符号位)全部取反。 ● ^:按位异或。当两位不同时返回1,相同时返回0。 ● <<:左移运算符。 ● >>:右移运算符 ● >>>:无符号右移运算符 代码示例如下: System.out.println(5&9); //输出1 System.out.println(5|9); //输出13 System.out.println(~-5); //输出4 System.out.println(5^9); //输出12 System.out.println(5<<2); //输出20 System.out.println(-5<<2); //输出-20 System.out.println(-5>>2); //输出-2 //下面输出1073741822 System.out.println(-5>>>2); 五、比较运算符 比较运算符用于判断两个常量或变量的大小,比较结果是是一个布尔值(true或false)。 比较运算符有:>(大于),>=(大于等于),<(小于),<=(小于等于),==(等于)。 代码示例如下: System.out.println(7>3); //输出true System.out.println(7<=3); //输出false 六、逻辑运算符 逻辑运算符用于操作两个布尔的变量或常量,有如下6个: ● &&:与,两个操作数都为true才返回true,否则返回false。 ● &:不短路与,作用与&&相同,但不会短路。 ● ||:或,两个操作数只要有一个为true,就返回true,两个操作数都为false才返回false。 ● |:不短路或,作用与||相同,但不会短路。 ● !:非,或取反,如果操作数是true,则返回false。如果是false,则返回true。 ● ^:异或,当两个操作数不同时才返回true,相同返回false。 下面代码示范了逻辑运算符短路与不短路的区别(以|和||的区别为例): int a = 3; int b = 9; if(a>2 | b++ >9){ System.out.println(b); } if(a>2 || b++ >9){ System.out.println(b); } &与&&的区别与此类似。 七、 三目运算符 三目运算符:? :,语法格式如下: (expression) ? if-true-statement : if-false-statement 三目运算符的语法规则是:先对逻辑表达式expression求值,如果expression返回true,则返回第二个操作数的值,否则返回第三个操作数的值。 程序实例如下: String str = 7>4?"7大于4":"7不大于4"; System.out.println(str); //输出7大于4 八、 运算符的优先级 下表中优先级上行优先于下行
|
|