算术运算符:+,-,*,/,%
public class Hello {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a/b); //0,结果取整
System.out.println((double)(a/b)); //0,结果取整以后再转换也没用
System.out.println(a/(double)b); //0.5
short c = 10;
byte d = 8;
System.out.println(c + d); //如果有long类型参与计算,结果会自动转为long;否则,无论有没有int类型,结果都会转为int类型
double pow = Math.pow(2, 3); //Java中没有幂运算的符号,所以要借助Math函数库
System.out.println(pow);
}
}
拓展:字符串连接
public class Hello {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a + b); //30
System.out.println("String " + a + b); //String 1020,只要+前面出现了字符串,则所有变量值都会转换成字符串连接
System.out.println(a + b + " String " + a + b); //30 String 1020,如果字符串相加在后面,则会先进行算术运算,再转换成字符串连接
}
}
自增自减运算符:++,--
public class Hello {
public static void main(String[] args) {
int a = 3;
int b = a++; //先给b赋值,再自增
//a = a + 1;(隐藏的步骤)
System.out.println(a); //4
System.out.println(b); //3
//a = a + 1;
int c = ++a; //先自增,再给c赋值
System.out.println(a); //5
System.out.println(c); //5
}
}
赋值运算符:=,+=,-=,*=,/=
a += b等价于a = a + b,其他的以此类推
关系运算符:>,<,>=,<=,==,!= instanceof
输出结果只有true和false
逻辑运算符:&&,||,!
public class Hello {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(a && b); //逻辑与运算,同真才真
System.out.println(a || b); //逻辑或运算,同假才假
System.out.println(!(a && b)); //逻辑非运算,真假反转
//短路运算:&&判断时,如果第一个就为假,那后面的代码不会再执行判断
}
}
拓展:短路运算
public class Hello {
public static void main(String[] args) {
//&&在判断时,如果第一个就为假,那后面的代码不会再执行判断
int a = 2;
boolean b = false && (a++>0);
System.out.println(a); //2,说明后面的a++语句并没有执行
}
}
位运算符:&,|,^,~,<<,>>,>>>
&,|,^,~(与、或、异或、非)
&运算只有对应位置同时为1才为1,|运算同时为0才为0,^运算对应位置相同为0,不同为1,~运算则全部反转
以二进制的形式演示位运算,假设A和B的二进制显示分别如下:
A = 0011 1100
B = 0000 1101
则
A & B | 0000 1100 | 与 |
---|---|---|
A | B | 0011 1101 | 或 |
A ^ B | 0011 0001 | 异或 |
~B | 1111 0010 | 非 |
<<,>>(左移,右移)
在二进制中,左移<<代表数字从第一个非0数字开始的部分整体往左移动一位,在数值大小上相当于乘以2,右移则相反
0 | 0000 0000 | 0 |
---|---|---|
1 | 0000 0001 | 2>>1 |
2 | 0000 0010 | 2 |
4 | 0000 0100 | 2<<1 |
8 | 0000 1000 | 2<<2 |
16 | 0001 0000 | 2<<3 |
拓展:2 * 8怎么运算速度最快?
public class Hello {
public static void main(String[] args) {
System.out.println(2<<3); //16,2 * 8在位运算中相当于左移3次,运算效率极高!
}
}
条件运算符:x ? y : z
public class Hello {
public static void main(String[] args) {
System.out.println(true ? 1 : 2); //1,x为真时返回y,为假时返回z
System.out.println(false ? 1 : 2); //2
}
}