Java基本运算符
一.基本算术运算符
基本算术运算符包括:加(+)、减(-)、乘(*)、除(/)、模(%)
注
- 除法注意数据类型
- 做运算后的结果有long就long类型。没有就是int类型
public class Draft {
public static void main(String[] args) {
int a = 10;
int b = 25;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a/(double)b);//除法注意数据类型
System.out.println(b%a);
System.out.println("=================================");
long aa = 15646546546546464L;
int bb = 123;
short cc = 10;
byte dd = 8;
System.out.println(aa+bb+cc+dd);//long
System.out.println(bb+cc+dd);//int
System.out.println(cc+dd);//int
//做运算后的结果有long就long。没有就是int类型
System.out.println("=================================");
}
}
二.自增自减运算符
a++;++a;a--;--a
注
- a++;//先赋值再自增
- ++a;//先自增再赋值
public class Draft {
public static void main(String[] args) {
int i = 3;
int j = i++;//先赋值再自增
System.out.println(i);
int k = ++i;//先自增再赋值
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
三.关系运算符
关系运算符主要有:==、!=、<、>、<=、>=
注
- 关系运算符的表达式返回值都是boolean类型。
public class Draft {
public static void main(String[] args) {
//关系运算符,返回结果是布尔类型
int aaa = 554;
int bbb = 888;
System.out.println(aaa>bbb);
System.out.println(aaa<bbb);
System.out.println(aaa<=bbb);
System.out.println(aaa>=bbb);
System.out.println(aaa==bbb);
System.out.println(aaa!=bbb);
}
}
四.逻辑运算符
1.常见的逻辑运算符有:&&、||、!、&、|(其中&和|不建议用)
逻辑运算的返回值也是boolean型。
2. “||”和“&&”是短路操作符,“&”和“|”是非短路操作符。对于短路操作符,如果能根据操作符左边的布尔表达式推算出整个表达式的布尔值,将不执行操作符右边的布尔表达式;对于非短路操作符,始终会执行操作符两边的布尔表达式。
public class Draft {
public static void main(String[] args) {
boolean a1 = false;
boolean a2 = true;
System.out.println("a1&&a2:" + (a1&&a2));
System.out.println("a1||a2:" + (a1||a2));
System.out.println(" !a :" + !(a2));
int b1=0;//短路运算(一遇到false就返回,不执行后面的语句)
boolean bb1=((b1>1)&&(b1++<2));
System.out.println(bb1);
System.out.println(b1);
}
}
五.位运算符和移位运算符
- 主要有:按位非(~)、按位与(&)、按位或(|)、按位异或(^)位操作表示按二进制位运算。
A=0011 1100
B=0000 1101
-----------------------
A&B=0000 1100 全是1就是1
A|B=0011 1101 有1就是1
A^B=0011 0001 不一样就是1
~A=1100 0011 1变0,0变1
- 移位运算符有:左移运算符(<<)、右移运算符(>>)、无符号右移(>>>)
左移<<:最左侧不要了,最右侧补0。
右移>>:最右侧不要,最左侧补符号位(正数补0,负数补1)。
无符号右移>>>:最右侧不要,最左侧补0。
奇技淫巧
a=2
a >> 1; ---> 1
a << 1; ---> 4
数 a 向右移一位,相当于将 a 除以 2;数 a 向左移一位,相当于将 a 乘以 2
public class Draft {
public static void main(String[] args) {
int kk = 2;
//10
System.out.println("\"十进制输出kk \"="+kk);
System.out.println("\"十进制输出kk>>1\"="+(kk>>1));
//1 把10中1右移了一位
System.out.println("\"十进制输出kk<<1\"="+(kk<<1));
//100 把10中的1左移了一位
System.out.println("\"二进制输出kk \"="+Integer.toBinaryString(kk));
System.out.println("\"二进制输出kk<<1\"="+Integer.toBinaryString(kk<<1));
System.out.println("\"二进制输出kk>>1\"="+Integer.toBinaryString(kk>>1));
}
}
六.偷懒运算符
- +=、-=;
a+=b;即a=a+b
a-=b;即a=a-b; - 三元运算
X ? Y : Z
如果X==true,结果为Y,否则为Z
public class Draft {
public static void main(String[] args) {
int x1 = 1;
int x2 = 2;
x1+=x2;//x1=x1+x2
System.out.println(x1);
x1-=x2;//x1=x1-x2;
System.out.println(x1);
System.out.println("===========================");
//三元运算
//X ? Y : Z
//如果X==true,结果为Y,否则为Z
int so=25;
String result=so<30 ? "对" : "不对";
String result01=so<20 ? "对" : "不对";
System.out.println(result);
System.out.println(result01);
}
}
Java运算符优先级
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。下表列出了所有的运算符的优先级以及结合性。
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ()、[]、{} | 从左向右 |
| 2 | !、+、-、~、++、-- | 从右向左 |
| 3 | *、/、% | 从左向右 |
| 4 | +、- | 从左向右 |
| 5 | «、»、>>> | 从左向右 |
| 6 | <、<=、>、>=、instanceof | 从左向右 |
| 7 | ==、!= | 从左向右 |
| 8 | & | 从左向右 |
| 9 | ^ | 从左向右 |
| 10 | | | 从左向右 |
| 11 | && | 从左向右 |
| 12 | || | 从左向右 |
| 13 | ?: | 从右向左 |
| 14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |