运算符就是对操作数进行操作的符号,例如a+b中a和b是操作数,+是运算符。Java中运算符和C语言中的运算符基本一致(当然也有自己的特点)。运算符主要有以下几类
+、-、*、\、%①:两个int相除时结果仍为int,同时还会向下取整,这一点很多人容易犯错
public class TestDemo {
public static void main(String[] args) {
int a = 3;
int b = 2;
System.out.println(a / b);//实际输出1,舍弃小数位
}
}

②:当两侧操作数类型不一致时,会向类型大的提升,这里尤其注意/
public class TestDemo {
public static void main(String[] args) {
// 类型提升
System.out.println(1+0.2);//1已经被提升为了double,输出1.2
//注意/运算符
System.out.println(5/2);//输出2
System.out.println((float)5/2);//输出2.5
System.out.println(5/(float)2);//输出2.5
System.out.println((float)(5/2));//输出2.0
}
}
③:\、%运算时,右操作数不能为0
public class TestDemo {
public static void main(String[] args) {
int a = 1;
int b = 0;
System.out.println(a / b);
}
}

④:%也可以操作负数
public class TestDemo {
public static void main(String[] args) {
System.out.println(10 % 3);
System.out.println(10 % -3);
System.out.println(-10 % 3);
System.out.println(-10 % -3);
}
}

+=、-=、*=、\=、%=public class TestDemo {
public static void main(String[] args) {
int a = 1;
a+=2; //相当于a=a+2
System.out.println(a);
int b = 1;
b-=2; //相当于b=b-2
System.out.println(b);
int c = 1;
c*=2; //相当于c=c*2
System.out.println(c);
int d = 1;
d/=2; //相当于d=d/2
System.out.println(d);
int e = 3;
e%=2; //相当于e=e%2
System.out.println(e);
}
}

++、--public class TestDemo {
public static void main(String[] args) {
int a = 1;
System.out.println(a++);//先使用故输出1,然后a变为2
System.out.println(++a);//先++变为3然后输出
}
}

== 、!= 、< 、>、 <=、 >==和==true或falsea<b<c这样的操作public class TestDemo {
public static void main(String[] args) {
int a = 1;
int b = 2;
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);
}
}

&&、||、!&&&&左右两侧必须都是boolean类型
规则为:遇假则假、全真则真

运算时从左到右依次判断,一旦某个表达式为false,则结果直接返回false,后续表达式不再执行(“短路”现象)
public class TestDemo {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2);
System.out.println(a == 1 && b > 100);
System.out.println(a > 100 && b == 2);
System.out.println(a > 100 && b > 100);
}
}

短路现象
public class TestDemo {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(((a > b) && ((19 / 0) == 0))); //a>b返回false,直接返回false,虽然后面除数为0,但是不执行
}
}

||||左右两侧必须都是boolean类型
true,则结果直接返回true,后续表达式不再执行(“短路”现象)public class TestDemo {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2);
System.out.println(a == 1 || b > 100);
System.out.println(a > 100 || b == 2);
System.out.println(a > 100 || b > 100);
}
}

短路现象
public class TestDemo {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(((a < b) || ((19 / 0) == 0))); //a<b返回true,直接返回true,虽然后面除数为0,但是不执行
}
}

!后面只能接布尔表达式,而不能像C语言一样出现类似于!1、!0的操作
public class TestDemo {
public static void main(String[] args) {
int a = 1;
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true
}
}

&、|、^、~关于位运算符这里就不详细展开了,只说一下具体规则。位运算符会针对比特位进行运算
&):如果两个二进制位都是 1, 则结果为 1, 否则结果为 0|):如果两个二进制位都是 0, 则结果为 0, 否则结果为 1^):如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1^):如果该位为 0 则转为 1, 如果该位为 1 则转为 0<<、>>、<<<<<:最左侧不要,最右侧补0;左移
N
N
N位,相当于乘以
2
N
2^{N}
2N<<:最右侧不要,最左侧补符号位(正数补0、负数补1);右移
N
N
N位,相当于除以
2
N
2^{N}
2N>>>:最右侧不要,最左侧补0public class TestDemo {
public static void main(String[] args) {
//左移
int a = 0x10;
System.out.printf("%x\n", a);
System.out.printf("%x\n", a << 1);
System.out.println("---------------------------------");
//右移
int b = 0x10;//正数
System.out.printf("%x\n", b);
System.out.printf("%x\n", b >> 1);
int c = 0xffff0000;//负数
System.out.printf("%x\n", c);
System.out.printf("%x\n", c >> 1);
System.out.println("---------------------------------");
//无符号右移
int d = 0xffffffff;//负数
System.out.printf("%x\n", d);
System.out.printf("%x\n", d >>> 1);
}
}

表达式1?表达式2:表达式3public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = a>b?a:b;
System.out.println(max);
}
}
