运算符分类
运算符优先级
补充:在实际运用中最好使用(),避免歧义。
运算符练习eg:
class TestOperator {
public static void main(String[] args) {
//算术运算符
int a = 3;
long b = 4;
// int c=a+b;
//Error:(100, 25) java: 不兼容的类型: 从long转换到int可能会有损失
long c = a + b;
System.out.println(c);
//运算规则: 1、两个操作数有一个为long,结果为long数据类型
// 2、没有long时,结果为int类型,即使操作数为byte、short,默认结果也为int类型。
/* 浮点运算:1、如果操作数有一个double,则默认结果为double类型
* 2、只有两操作数都是float,结果才为float类型。
* 补充:默认结果偏向于大的数据类型 */
int d = 10 % 3; //取模运算:操作可以为浮点数,一般为整数类型,结果为余数。
System.out.println(d);
//测试自增、自减
int e = 15;
e++;
System.out.println(e);
e = 15;
e--;
System.out.println(e);
//测试扩展运算符
int x = 4, y = 6;
//int y= 6;
x += y; //等价于 x=x+y //中间含有空格则报错
System.out.println(x);
x = 4;
x *= y + 3; //等价于 x= x*(y+3)
System.out.println(x);
}
}
运行结果:
7
1
16
14
10
36
Process finished with exit code 0
关系(比较)运算符eg:
class TestOperator1 {
public static void main(String[] args) {
int x = 4, y = 6;
boolean a = x < y;
System.out.println(a);
char b = 'h';
System.out.println((int) b); //char值位于0~655535之间,通过(int)强制转为int类型,可以看到对应的数字。
System.out.println(b < 100); //char也能用于关系运算符的比较
//测试逻辑运算符
boolean b1 = true;
boolean b2 = false;
System.out.println(b1 & b2); //与: 有一个false,结果为false
System.out.println(b1 | b2); //或:有一true, 结果为true
System.out.println(!b2); //非:相反的,此结果为true
System.out.println(b1 ^ b2); //异或: 相同为false,不同为true,此结果为true
//短路与,短路或
//int g = 3/0; //o不能做除数,会报错
boolean b3 = 1 > 2 && 4 < 3 / 0; //短路与:只要一个是false,就是false,此表达式前面是false,后面错误直接跳过了
boolean b4 = 1 < 2 || 4 < 3 / 0; //短路或:只要前面是true,就是true,后面就直接跳过了
System.out.println(b3);
System.out.println(b4);
}
}
运行结果:
true
104
false
false
true
true
true
false
true
Process finished with exit code 0
位运算符eg:
class TestOperator2 {
public static void main(String[] args) {
int a = 4, b = 5;
System.out.println(a & b); //机器编译时按二进制来进行操作 //结果:4
System.out.println(a | b); //结果:5
System.out.println(a ^ b); //结果:1
System.out.println(~b); //结果:-6
//移位 <左移一位相当于乘以2;
// >右移一位相当于除以2。
int c = 5 << 2; //等价于 c= 5*2*2
System.out.println(c); //20
System.out.println(40 >> 3); //等价于40/2/2/2=5
}
}
运行结果:
4
5
1
-6
20
5
Process finished with exit code 0
三目运算符eg:
class TestOperator4 {
public static void main(String[] args) {
int score = 80;
String a = score < 60 ? "不及格" : "及格"; //比 if else 更简洁
System.out.println(a);
int x = -100;
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println(flag);
}
}
运行结果:
及格
-1
Process finished with exit code 0
字符串连接符 + eg:
class TestOperator3 {
public static void main(String[] args) {
int a = 3, b = 4;
System.out.println(a + b); //7
String x = "3"; //(字符串)使用双引号,char(字符)使用单引号
int y = 4;
System.out.println(x + y); // 34 此时 + 为连接符,对比上个输出
//条件是String,不是char,在char中:+依然是相加
char c1 = 'h';
char c2 = 'i';
System.out.println(c1 + c2); //结果为209,h为104,i为105,字符会被当做整数来运算
System.out.println("" + c1 + c2); //小技巧: 通过 ”“+ 使运算变为字符连接
}
}
运行结果:
7
34
209
hi
Process finished with exit code 0