算术运算符:
- +:加号有两种使用方式
(1) 两边是数值类型,则进行加和;
(2) 有一边是字符串类型则进行字符串拼接,整体变成字符串类型。
- /:除法,左操作数除以右操作数,结果取整数,小数舍弃
- %:取余,左操作数除以右操作数的余数,结果取余数。
5/3=1;-5%3=-2;-5%-3=-2;5%-3=2;5%3=2;
- ++:自增1,--类似
a++:先取值运算再自增;
++a:先自增再取值运算;
(考)
int a=1;
a=a++;
System.out.println(a);
//1
int j=0;
for(int i=0;i<100;i++){
j=j++;
}
System.out.println(j);
//0 ,取 j 的值准备为 j 赋值,但由于++运算符优先级高于赋值运算符,
//于是先自增1后,再将第一步取出来的0赋给j,所以 j 一直等于0.
- 其他:-、*。
关系运算符(得到布尔值)
- ==:检查如果两个操作数的值是否相等,如果相等则条件为真。注意和赋值运算符"="区分。
- !=:检查如果两个操作数的值是否相等,如果值不相等则条件为真。
- 其他:<、>、<=、>=。
逻辑运算符
- &&:(一假则假)
逻辑与:当且仅当两个操作数都为真,条件才为真。
短路于:A&&B,当AB均为真时结果才为真,当A为假后结果必定为假,这是就不会再判断B了。
- ||:(一真则真)
逻辑或:如果任何两个操作数任何一个为真,条件为真。
短位或:A||B,当AB有一为真时结果才为真,当A为真后结果必定为真,这是就不会再判断B了。
- !:用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。
(考)
int a=1,b=1;
System.out.println(b);
System.out.println(a>1||--b>1);
//0,false
//一真则真
int a=1,b=1;
System.out.println(b);
System.out.println(a==1||--b>1);
//1,true
//一假则假
int a=1,b=1;
System.out.println(b);
System.out.println(a>1&&--b>1);
//1,false
int a = 0x9af700; //1001 1010 1111 0111 0000 0000 00
a <<= 2;
//0x26bdc00
位运算符
- &:按位与,按照对应位相与,只有1&1才得1。
- |:按位或,按照对应位相或,只有0|0才得0。
- ~:按位取反,翻转操作数的每一位,即0变成1,1变成0。
- Λ:异或运算,不同则为1(0^1==1),一个数连续异或另一个数两次,等于啥也没发生。
条件(三元)运算符
- 基本使用
public class HelloWorld {
public static void main(String []args) {
int s =99;
System.out.println(s<60?"不及格":(s<80?"及格":(s<90?"良":"优秀")));
}
}
- 嵌套使用
public void test5(int a) {
char grade =(a>=90?'A':(a>=60?'B':'C'));
System.out.println(grade);
}
运算符优先级
从上到下优先级依次降低
类别 |
操作符 |
关联性 |
后缀 |
() [] . (点操作符) |
左到右 |
一元 |
expr++ expr-- |
从左到右 |
一元 |
++expr --expr + - ~ ! |
从右到左 |
乘性 |
* /% |
左到右 |
加性 |
+ - |
左到右 |
移位 |
>> >>> << |
左到右 |
关系 |
> >= < <= |
左到右 |
相等 |
== != |
左到右 |
按位与 |
& |
左到右 |
按位异或 |
^ |
左到右 |
按位或 |
| |
左到右 |
逻辑与 |
&& |
左到右 |
逻辑或 |
|| |
左到右 |
条件 |
?: |
从右到左 |
赋值 |
= += -= *= /= %= =>>= <<= &= ^= |= |
从右到左 |
逗号 |
, |
左到右 |
网友评论