三、运算符
按运算优先级排列:
括号()
后置自增减运算符 v++, v–
前置自增减运算符 ++v, –v 正负标识符 +v, -v 按位和逻辑非运算符 ~, !
基本运算符 *, /, %(取余) +, -
移位运算符 «, »(带符号), »>(无符号)
比较运算符 >, <, >=, <=, instanceof ==, !=
按位运算符及逻辑与、或、异或运算符 &
| && ||
三元运算符 ?:
赋值运算符 =, *=, /=, %= +=, -=, «=, »= &=, ^=, !=, »>=
例子 | 值 | 含义 |
---|---|---|
int x = 5/2; | 2 | 整数除法 |
double y = 5/2; | 2.0 | 先做整数除法,然后再将结果转换为double |
double z = 5.0/2; double u = 5/2.0; |
2.5 2.5 |
由于分子、分母至少有一个是浮点数,因此做浮点除法 |
int w = (int)(5.0/2) | 2 | 先做浮点除法,然后取整。取整的算法就是,直接截去小数部分(注意:不是四舍五入) |
与(\&\&)、或(||)短路运算法则
与(\&\&)、或(||)遵循短路运算法则,即:一旦前表达式为false(与“&&”)/true(或“ | ”),则直接得结果false(与“&&”)/true(或“ | ”),而不运行后表达式的操作。 |
&, | 也可进行逻辑运算,但⚠不适用短路运算法则,因此不建议使用。 |
位运算符
位运算符示例:
/* 15 00000000 00000000 00000000 00001111
23 00000000 00000000 00000000 00010111
&= 7 00000000 00000000 00000000 00000111
|=31 00000000 00000000 00000000 00011111
~15=-16 11111111 11111111 11111111 11110000
^=24 00000000 00000000 00000000 00011000*/
左移运算符<<
相当于乘以2的n次方,右移运算符>>
相当于除以2的n次方。
bonus!
自增运算符++,自减运算符–的原理
j=i++;
:①将i的值赋值给“i++”②i本身+1③将“i++”的值赋给j。(可以通过i=i++
得到验证)
j=++i;
:①i本身+1②将i的值赋值给“i++”③将“i++”的值赋给j。
比较运算符
比较运算符的输出是一个布尔值。如 boolean a = 3>2;
,此时a为true。
不同数据类型,相同值的变量,如int a = 10; double b = 10.0;
,a==b返回值为true。
基本数据类型中,可以比较的数据类型包括:byte short int long float double char。boolean不可以比较大小,但boolean之间可以判断是否相等(==)或不等(!=)。
三元运算符
语法:条件?值1:值2;
条件成立(true)返回值1,条件不成立(false)返回值2
进行运算时数据类型可能会自动转换
当运行short s=10;s=s+5;
时会报错。这是因为里面的5是int类型,“s+5”的结果会自动转换为int,但是s本身的数据类型为short。把int的数据值赋予short的变量时会报错。因此建议使用s+=5
替代。