运算符是一种特殊的符号,用以表示数据的运算,赋值和比较。
就是+, -, *, /, %, ++, –
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); } }按照优先级别的高低进行排序就是: 自加/减运算符、 算术运算符、比较运算符、逻辑运算符、赋值运算符。
