Java 运算符
01、算数运算符
算术运算符除了最常见的加减乘除,还有一个取余的运算符,用于得到除法运算后的余数。
int a = 10; int b = 5; System.out.println(a + b);//15 System.out.println(a - b);//5 System.out.println(a * b);//50 System.out.println(a / b);//2 System.out.println(a % b);//0 b = 3; System.out.println(a + b);//13 System.out.println(a - b);//7 System.out.println(a * b);//30 System.out.println(a / b);//3 System.out.println(a % b);//1
对于初学者来说,加法(+)、减法(-)、乘法(*)很好理解,但除法(/)和取余(%)会有一点点疑惑。在以往的认知里,10/3 是除不尽的,结果应该是 3.333333...,而不应该是 3。相应的,余数也不应该是 1。这是为什么呢?
因为数字在程序中可以分为两种,一种是整型,一种是浮点型,整型和整型的运算结果就是整型,不会出现浮点型。否则,就会出现浮点型。
02、关系运算符
关系运算符用来比较两个操作数,返回结果为 true 或者 false。
03、位运算符
public class BitOperator { public static void main(String[] args) { int a = 60, b = 13; System.out.println("a 的二进制:" + Integer.toBinaryString(a)); // 111100 System.out.println("b 的二进制:" + Integer.toBinaryString(b)); // 1101 int c = a & b; System.out.println("a & b:" + c + ",二进制是:" + Integer.toBinaryString(c)); c = a | b; System.out.println("a | b:" + c + ",二进制是:" + Integer.toBinaryString(c)); c = a ^ b; System.out.println("a ^ b:" + c + ",二进制是:" + Integer.toBinaryString(c)); c = ~a; System.out.println("~a:" + c + ",二进制是:" + Integer.toBinaryString(c)); c = a << 2; System.out.println("a << 2:" + c + ",二进制是:" + Integer.toBinaryString(c)); c = a >> 2; System.out.println("a >> 2:" + c + ",二进制是:" + Integer.toBinaryString(c)); c = a >>> 2; System.out.println("a >>> 2:" + c + ",二进制是:" + Integer.toBinaryString(c)); } }
1)按位左移运算符:
public class LeftShiftOperator { public static void main(String[] args) { System.out.println(10<<2);//10*2^2=10*4=40 System.out.println(10<<3);//10*2^3=10*8=80 System.out.println(20<<2);//20*2^2=20*4=80 System.out.println(15<<4);//15*2^4=15*16=240 } }
10<<2
等于 10 乘以 2 的 2 次方;10<<3
等于 10 乘以 2 的 3 次方。
2)按位右移运算符:
public class RightShiftOperator { public static void main(String[] args) { System.out.println(10>>2);//10/2^2=10/4=2 System.out.println(20>>2);//20/2^2=20/4=5 System.out.println(20>>3);//20/2^3=20/8=2 } }
10>>2 等于 10 除以 2 的 2 次方;20>>2 等于 20 除以 2 的 2 次方。
04、逻辑运算符
逻辑与运算符(&&):多个条件中只要有一个为 false 结果就为 false。
逻辑或运算符(||):多个条件只要有一个为 true 结果就为 true。
public class LogicalOperator { public static void main(String[] args) { int a=10; int b=5; int c=20; System.out.println(a<b&&a<c);//false && true = false System.out.println(a>b||a<c);//true || true = true } }
逻辑非运算符(!):用来反转条件的结果,如果条件为 true,则逻辑非运算符将得到 false。
单逻辑与运算符(&):很少用,因为不管第一个条件为 true 还是 false,依然会检查第二个。
单逻辑或运算符(|):也会检查第二个条件。
也就是说,& 和 | 性能不如 && 和 ||,但用法一样:
public class LogicalOperator1 { public static void main(String[] args) { int a=10; int b=5; int c=20; System.out.println(a<b&a<c);//false & true = false System.out.println(a>b|a<c);//true | true = true } }
05、赋值运算符
赋值操作符恐怕是 Java 中使用最频繁的操作符了,它就是把操作符右侧的值赋值给左侧的变量。来看示例:
public class AssignmentOperator { public static void main(String[] args) { int a=10; int b=20; a+=4;//a=a+4 (a=10+4) b-=4;//b=b-4 (b=20-4) System.out.println(a); System.out.println(b); } }
不过在进行数值的赋值时,需要小点心,比如说下面这种情况:
编译器之所以提示错误,是因为 = 右侧的算术表达式默认为 int 类型,左侧是 short 类型的时候需要进行强转。
public class AssignmentOperator1 { public static void main(String[] args) { short a = 10; short b = 10; //a+=b;//a=a+b internally so fine a = (short)(a + b); System.out.println(a); } }
除此之外,还会有边界问题,比如说,两个非常大的 int 相乘,结果可能就超出了 int 的范围:
public class BigIntMulti { public static void main(String[] args) { int a = Integer.MAX_VALUE; int b = 10000; int c = a * b; System.out.println(c); // -10000 } }
程序输出的结果为 -10000,这个答案很明显不是我们想要的结果,虽然可以通过右侧表达式强转 long 的方法解决:
public class BigIntMulti { public static void main(String[] args) { int a = Integer.MAX_VALUE; int b = 10000; long c = (long)a * b; System.out.println(c); // 21474836470000 } }
但尽量不要这样做,结果非常大的时候,尽量提前使用相应的类型进行赋值。
long a = Integer.MAX_VALUE - 1; long b = 10000; long c = a * b; System.out.println(c); // 21474836460000
06、三元运算符
三元运算符用于替代 if-else,可以使用一行代码完成条件判断的要求。来看示例:
public class TernaryOperator { public static void main(String[] args) { int a=2; int b=5; int min=(a<b)?a:b; System.out.println(min); } }
如果 ? 前面的条件为 true,则结果为 : 前的值,否则为 : 后的值。这个可以用 if 语句来替代。
流程控制语句
可以直接去看我之前写的C++的,没什么区别