javaSE——运算符
运算符
优先级:使用优先级为 1 的小括号可以改变其他运算符的优先级
优先级 运算符 结合性 1 ()、[]、{} 从左向右 2 !、+、-、~、++、-- 从右向左 3 *、/、% 从左向右 4 +、- 从左向右 5 «、»、>>> 从左向右 6 <、<=、>、>=、instanceof 从左向右 7 ==、!= 从左向右 8 & 从左向右 9 ^ 从左向右 10 | 从左向右 11 && 从左向右 12 || 从左向右 13 ?: 从右向左 14 =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= 从右向左
演示:
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//Ctrl + D :复制当前行到下一行
int a = 10;
int b = 20;
int c = 30;
int d = 40;
System.out.println(a+b);
System.out.println(c-d);
System.out.println(a*c);
System.out.println(c/(double)d);//除法这块注意,可能产生小数要强转double
}
}
package operator;
public class Demo02 {
public static void main(String[] args) {
long a = 12312312313123L;
int b = 123;
short c = 10;
byte d = 8;
System.out.println(a+b+c+d);//long,自动向最高类型转换
System.out.println(b+c+d);//int
System.out.println(c+d);//int,short+byte注意最高类型不是int,也会自动转为int
//另外int类型不能转string
}
}
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果: 正确,错误 布尔值
//if
int a = 10;
int b = 20;
int c = 21;
//取余%,模运算
System.out.println(c%a); // 21/10=2...1,结果为1
System.out.println(a<b);
System.out.println(a>b);
System.out.println(a==b);
System.out.println(a!=b);
}
}
package operator;
public class Demo04 {
public static void main(String[] args) {
//++ -- 自增,自减 一元运算符
int a=3;
int b=a++; //执行完这行代码,先给b赋值再自增,b=3
//a = 4
int c = ++a;//执行这行代码之前,先自增,再给c赋值,c=5
//a=5
//幂运算,用double接收,用到数学工具类
double m = Math.pow(2,3);
System.out.println(m);
}
}
package operator;
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b: "+(a&&b));//逻辑与:两个都为真,结果才为true
System.out.println("a || b: "+(a||b));//逻辑或:两个变量有一个为真,则结果才为true
System.out.println("! (a && b): "+!(a&&b));//取反:如果是真,则变为假
//短路运算:比如逻辑与,如果左侧表达式为false不会判断右侧而直接出结果false
int m =2;
boolean k =(m<1)&&(m++<1);//如果执行右侧表达式,m结果为3
System.out.println(k);//false
System.out.println(m);//2,短路
}
}
package operator;
public class Demo06 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
-------------------
A&B = 0000 1100 同时为1才取1
A|B = 0011 1101 有一个为1就为1
A^B = 0011 0001 相同为0,不同为1
~B = 1111 0010
效率极高!!!
<< 二进制1左移一位, 十进制*2
>> 二进制1右移一位, 十进制/2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);//16
}
}
package operator;
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a += b;//a=a+b
//...
System.out.println(a);
//字符串连接符 包含string和+
//面试题
System.out.println(""+a+b);//1020:遇到string先转化为字符进行拼接
System.out.println(a+b+"");//30:先运算为30,遇到String再转化为字符串进行拼接
}
}
package operator;
public class Demo08 {
//三元运算符
// x ? y : z
//如果x==true,结果为y,否则结果为z
public static void main(String[] args) {
int score = 50;
String type = score < 60 ? "不及格" : "及格";//必须掌握,代替if更精简
System.out.println(type);
}
}