运算符
什么是运算符?
运算符是一种特殊的符号,用以表示数据的运算,赋值和比较。
Java常见的运算符
算术运算符
就是+, -, *, /, %, ++, –
package day2.operate;
public class Demo01 {
public static void main(String[] args) {
int a=1;
int b=2;
int c=3;
int d=4;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println((double) a/b);//做一下强制类型转换,否则会输出0
}
}
当进行算术运算符的操作时,当操作数中有long类型的参数时,结果就为long类型;否则为int类型
package day2.operate;
public class Demo02 {
public static void main(String[] args) {
long a=5234137913L;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//当操作数中有long类型时,结果为long型
System.out.println(b+c+d);//结果为int型
System.out.println(c+d);//结果为int型
}
}
自增,自减运算符的运算
package day2.operate;
public class Demo04 {
public static void main(String[] args) {
// ++ -- 一元运算符
int a = 3;
int b = a++;
int c = ++a;
System.out.println(a);
System.out.println(b);
System.out.println(c);
//当++在变量后面时,先执行完这行代码后再自增
//当++在变量前面时,先自增再执行这行代码
// -- 同理
}
}
关系运算符
就是>, <, >=, <=, ==, !=, instance of
关系运算符返回的结果是布尔值
package day2.operate;
public class Demo03 {
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
}
}
逻辑运算符
就是 &&, ||, !
逻辑运算
package day2.operate;
public class Demo06 {
public static void main(String[] args) {
//逻辑运算符
// && 为 与(and) || 为 或(or) !为 否(not)
boolean a =true;
boolean b=false;
System.out.println("a && b : "+(a&&b));//false
System.out.println("a || b : "+(a||b));//true
System.out.println("! (a && b) : "+(!(a&&b)));//false
}
}
逻辑运算中的短路运算:当逻辑运算中的第一个判定条件为false时,就不会判定下面的条件
package day2.operate;
public class Demo07 {
public static void main(String[] args) {
int a = 3;
boolean flag = (a < 2) && (++a < 2);
System.out.println(flag);
//可以看出在当第一个判定为false时就会自动停止运算,不会往下运行下去
System.out.println(a);//输出的a为3
}
}
位运算符
就是&, |, ^, ~, >>, <<, >>>, !!!
位运算的操作对象是二进制位,所以效率很高
位运算的效率很高,在许多程序的底层算法中,有许多精巧的位运算
package day2.operate;
public class Demo08 {
public static void main(String[] args) {
/*
A = 0010 1100
B = 0001 1101
与运算,二者都为1时取1
A&b = 0000 1100
或运算,二者有一个1就取1
A|b = 0011 1101
抑或运算,二者相同为0,不相同为1
A^B = 1100 0001
取反运算,取此数的补码
~A = 1101 0011
------------------------------------
<< 左移 相当于*2
>> 右移 相当于/2
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2 << 3);//16
}
}
赋值运算符
就是 =
package day2.operate;
public class Demo09 {
public static void main(String[] args) {
//给i赋一个值
int i = 1;
}
}
条件运算符
就是 ?:
package day2.operate;
public class Demo12 {
public static void main(String[] args) {
// x ? y : z
//若x为true,则y,否则就z
int age = 19;
String state = age > 18 ? "成年" : "未成年";
System.out.println(state);
}
}
扩展赋值运算符
就是+=,-=,*=,/=
需要注意的是,+=拥有强制类型转换的功能,如果两个运算对象的数据类型不一样,精度可能会下降。
package day2.operate;
public class Demo10 {
public static void main(String[] args) {
int a = 3;
int b = 1;
a += b; //a=a+b
//其余的也是同理
System.out.println(a);
//精度下降
int c = 3;
double d = 3.14;
//这里自动进行了强制类型转换
c += d;
System.out.println(c);//输出结果为6
}
}
字符串连接符
使用 “+” 实现
当数字类型运算之前出现字符串类型时,会将其他变量也转换成字符串类型
package day2.operate;
public class Demo11 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a + b);//会输出30
System.out.println("" + a + b);//将a与b连接起来了,结果为1020
System.out.println(a + b + "");//会输出30
}
}
除以上所说的这些运算符之外,很多运算我们会使用数学工具类来计算
如幂运算
package day2.operate;
public class Demo05 {
public static void main(String[] args) {
double num = Math.pow(2,3);//必须是double型变量
System.out.println(num);
}
}
运算的优先级问题
按照优先级别的高低进行排序就是: 自加/减运算符、 算术运算符、比较运算符、逻辑运算符、赋值运算符。