基本运算符
- 算数运算符
+、-、*、/(取商)、%(取余/取模)
10/20 = 0;10%20 = 10;
-
赋值运算符
=
-
关系运算符
<、>、>=、<=、==、!=
关系运算符返回结果是布尔型:true or false。
补充:ctrl + D:复制当前行到下一行
运算中的数据类型变化:多个数运算中,如果都是整数类型,有一个是Long类型,则结果也是Long,否则都是int类型。
public class Demo05 {
public static void main(String[] args) {
//算术运算
int a = 10;
int b = 20;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
//关系运算
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
//数据类型验证
long c = 1_3466_7891_1234L;
int d = 123;
double e = 0.1;
System.out.println(a+b+c+d); //Long
System.out.println(a+b+d); //int
System.out.println(a+b); //int
System.out.println(c+e); //double
System.out.println(d+e); //double
}
}
输出结果:
30
-10
200
0
10
false
true
false
true
1346678911387
153
30
1.3466789112341E12
123.1
自增自减运算符
自增
a++或++a,等于a = a + 1。
两者的区别在于:
- a++ 先将其所处语句执行完,再自增。比如语句b = a++; 这句代码执行顺序是:先将a的值赋给b,再对a进行自增运算,即执行a = a + 1。
- ++a 先自增,再将其所处语句执行完。比如语句b = ++a; 这句代码执行顺序是:先对a进行自增运算,即执行a = a + 1,再将运算后a的值赋给b。
public class Demo06 {
public static void main(String[] args) {
int a = 3;
int b = a++; //先将a的值赋给b之后再自增
// 相当于在此执行了一次 a = a + 1;
System.out.println(a);
// 相当于在此执行了一次 a = a + 1;
int c = ++a; //先自增后再将自增后的结果赋给c
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
输出结果:
4
5
3
5
自减
道理和自增一样。
Math类
Math类是一个数学工具类,里面有很多科学计算函数,可以直接使用。比如求2^3,自己写的话是2 * 2 * 2,简短时自己写还好,但是量大了就很复杂。因此可以使用Math类是提供的pow()方法直接求。
double pow = Math.pow(3,2);
System.out.println(pow);
输出结果:
9.0
逻辑运算符
- 与 && 两个变量都为真,结果才为真
- 或 || 两个变量有一个为真,结果就为真;两个变量都为假,结果才为假
- 非(取反) ! 如果变量为真,则变为假;如果变量为假,则变为真
短路运算
如果与运算的第一位就为假,则整个结果一定为假,后面的内容不再运算;
如果或运算的第一位就为真,则整个结果一定为假,后面的内容不再运算。
public class Demo07 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a&&b: "+(a&&b));
System.out.println("a||b: "+(a||b));
System.out.println("!a: "+(!a)+"\n!b: "+(!b));
//短路测试
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
boolean e = (c>4)||(c++<4);
System.out.println(e);
System.out.println(c);
}
}
输出结果:
a||b: true
!a: false
!b: true
false
5 //如果没有发生短路,则c++会进行运算,输出结果则为6,而真实结果是5,说明发生短路
true
5//同理
位运算符
- 与 & 只有相比较的两个二进制数对应位置都为1时才为1,否则结果都为0
- 或 | 只有相比较的两个二进制数对应位置都为0时才为0,否则结果都为1
- 异或 ^ 只有相比较的两个二进制数对应位置相同时才为0,否则结果都为1
- 非 ~
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
移位符
左移 << 代表将一个数*2
右移 >> 代表将一个数/2
将2进制的数整体向左或向右移动几位,如2<<3=16。
2*8=16 可以表示为2 * 2 * 2 * 2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
三元运算符
-
条件运算符
? :
x ? y : z 如果x==true,则结果为y,否则结果为z
int score = 80;//int score = 50; String type = score<60?"不及格":"及格"; System.out.println(type); 输出结果: 及格 //不及格
-
扩展赋值运算符
a+=b <=> a=a+b
a-=b <=> a=a-b
a*=b <=> a=a *b
a/=b <=> a=a/b
-
字符串连接符 +
int A = 10; int B = 20; System.out.println(""+A+" "+""+B); System.out.println(""+A+B); System.out.println(A+B); System.out.println(A+B+""); System.out.println(A+B+""+A+B); 输出结果: 10 20 //可以看到输出中,“”后使用+连接几个变量,表明输出“”里的内容后应该紧接着输出连接的变量的内容。 1020 30 //这个表明输出的内容是A与B相加的结果 30 //将“”放在最后,程序会把A与B先相加,在输出“”的内容,但是“”后无变量,所以没有输出内容。 301020 //两个结果的综合比较