运算符可以是一元、二元或三元的。
一元运算符有1个操作数。例如,递增运算符"++"就是一元运算符。
二元运算符有2个操作数。例如,除法运算符"/"有2个操作数。
三元运算符有3个操作数。例如,条件运算符"?:"具有3个操作数。
运算符的行为还可能因所提供的操作数的数量而异。减法运算符"-"既是一元运算符又是二元运算符。对于减法运算符,如果只提供一个操作数,则该运算符会对操作数取反并返回结果;如果提供两个操作数,则减法运算符返回这两个操作数的差。例如:
- // 将减法运算符用作一元运算符(取反运算符)
- trace(-5); // -5
- // 将减法运算符用作二元运算符
- trace(9-3); // 6
Java 语言支持如下运算符:
算术运算符: +,-,*,/,%,++,--
赋值运算符 =
关系运算符: >,<,>=,<=,==,!= instanceof
逻辑运算符: &&,||,!
位运算符: &,|,^,~ , >>,<<,>>>(了解!!!)
条件运算符 ?:
扩展赋值运算符:+=,-=,*=,/=
一元运算符
int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
int c= ++a; //执行完后,c=5。先自增,再给b赋值
注意:java中的乘幂处理:
int a = 3^2; //java中不能这么处理, ^是异或符号。
double b = Math.pow(3,2);
Math类提供了很多科学和工程计算需要的方法和常数。
二元运算符
整数运算:
如果两个操作数有一个为Long, 则结果也为long
没有long时,结果为int。即使操作数全为shot,byte,结果也是int.
浮点运算:
如果两个操作数有一个为double,则结果为double.
只有两个操作数都是float,则结果才为float.
取模运算
其操作数可以为浮点数,一般使用整数。如:5.9%3.9=2.000000004
要点:
负数%负数=负数;
负数%正数=负数;
正数%负数=正数;
注:一般都是正整数运算,不用考虑这么细!
布尔逻辑表达符
逻辑与:&&和&,逻辑或:||和|,逻辑非:!。
逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。
逻辑与只要有一个为false, 则直接返回false.
逻辑或只要有一个为true, 则直接返回true;
boolean c = 1>2&&2>(3/0);
位运算符
(了解)
~-- 取反 & -- 按位与
| -- 按位或 ^ -- 按位异或
<<:左移运算符,>>:右移运算符 >>>:无符号移位运算符
右移一位相当于除2取商。
左移一位相当于乘2。
int a = 3*2*2;
int b =3<<2; //相当于:3*2*2;
int a = 12/2/2;
int b = 12>>2;
扩展运算符
运算符 | 用法举例 | 等效的表达式 |
+= | 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 |
字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
int c = 12;
System.out.println("c="+ c);
三目条件运算符(三元运算符)
三目条件运算符,语法格式:
x ? y : z
其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。
举例:
int score = 80; int x = -100;
score < 60 ?"不及格" :"及格";
intflag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " +type);
System.out.println("flag= "+flag);
运算符优先级的问题
R to L | . ( ) { } ; , |
L to R | * / % |
L to R | + - |
L to R | << >> >>> |
L to R | < > <= >= instanceof |
L to R | == != |
L to R | & |
L to R | ^ |
L to R | | |
L to R | && |