运算符
(一).赋值运算符 :
1.基础赋值运算符 :
=是唯一一个自右向左运算的符号
2. 扩展赋值运算符 : (基础赋值运算符+算数运算符)
+= : a+=2; a=a+2;
-= : a-=2; a=a-2;
= : a=2; a=a*2;
/= : a/=2; a=a/2;
%= : a%=2; a=a%2;
优点 : 自动做强制类型转换
提高执行效率
推荐使用扩展赋值运算符
在编译期间,满足条件的代码会自动优化成为扩展赋值运算符
(二).比较|关系运算符 :
< > <= >= : 操作数只能为数值型的操作数 byte short int long float double char
== != : 操作数可以为基本数据类型或者引用数据类型
注意 : 比较运算符的运行结果为boolean结果
public class Class011_Operator{ public static void main(String[] args){ //练习 double d=10/3; //3.0 int a=10/3; //3 System.out.println(a==d); //true System.out.println(a); //3 System.out.println(d); //3.0 d=10/3.0; //3.333 a=10/3; //3 System.out.println(a==d); //false System.out.println(a); //3 System.out.println(d); //3.333 System.out.println("hello"!="hello"); //false } }
(三).逻辑运算符 :
两边操作数值都为boolean类型的表达式
& (与): 两边都为true,结果为true,一个为false就为false
|(或) : 一个为true就是true,两个false才为false
!(反) : 取反
^(异或) : 相同为false,相反为true
短路运算符 : 如果第一个操作数的结果就能决定最终的结果,第二个操作数就不执行
&& : 两边都为true,结果为true,一个为false就为false
| | : 一个为true就是true,两个false才为false
建议 : 用短路运算符代替&与|
public class Class012_Operator{ public static void main(String[] args){ System.out.println("=============练习================="); int a=10; int b=9; System.out.println(a>b & ++b>a); //F System.out.println("a="+a+",b="+b); //10 10 System.out.println(a<b | b<a); //F System.out.println(!(a>b ^ a>9)); //F System.out.println(10>5 & 10/0==0);//数学异常 System.out.println(10<5 && 10/0==0); //F } }
(四).条件运算符 :
条件表达式?值1 : 值2;
执行流程 :
1.计算条件表达式(要求值为boolean类型的表达式),得到一个boolean结果.
2.如果结果为true,取值1;如果结果为false,取值2
public class Class013_Operator{ public static void main(String[] args){ int a = 8; //判断一个数是否为偶数 String s = a%2==0?"偶数" : "奇数"; System.out.println(s); int b = 9; int max = a>b?a:b; System.out.println(max); System.out.println(false?"哈哈":123); //定义3个变量,获取3个变量中的最大数输出 int c = 13; //1) max = a>b?a:b; max = max>c?max:c; System.out.println(max); //2) max = a>b && a>c?a:b>c?b:c; System.out.println(max); } }
//练习 public class Class13_Operator{ public static void main(String[] args){ //比较三个值的大小 int a=3; int b=4; int c=5; int int max=a>b?a:b>c?m:c; //int max=a>b?a:b; //int max1=max>c?max:c; System.out.println(max1); } }
(五).位运算符(了解)
将操作数转为二进制,然后对二进制的数据进行指定规则的运算,最终将结果转为十进制
& : 一个为0就为0,两个为1才是1
| : 一个为1 就为1,两个为0才是0
^ :相同为0,不同为1
(六).位移运算符
<< 左移运算符 : 将第一个操作数转为二进制,向左移动第二个操作数的位数,空位补0,最终的二进制结果转为十进制
规律 : a>>b a*2^b
> > 右移运算符 : 将第一个操作数转为二进制,向右移动第二个操作数的位数,空位补0,最终的二进制结果转为十进制
规律 : a>>b a/2^b
//练习 public class Class14_Operator{ public static void main(String[] args){ int a=3; int b=4; boolean x = a < b ? ++a * 2 > b || a > b : a < b; System.out.println(x);//true x = a < b ? ++a * 2 > b || a > b : a < b; System.out.println(x);//F } }
public class Class014_Operator{ public static void main(String[] args){ System.out.println(2&3); //2 System.out.println(2|3); //3 System.out.println(2^3); //1 System.out.println(8<<2); //32 System.out.println(8>>2); //2 System.out.println(9>>2); //2 } }
(七).运算符优先级 : 单目算数位关系,逻辑三目后赋值
public class Class015_Operator{ public static void main(String[] args){ int a = 2; int b = 5; boolean x = a < b ? ++a * 2 > b || a > b : a < b; System.out.println(x); //T //&&优先级高于||,先执行&&,后执行|| System.out.println(false && true || true); //T System.out.println(true || true && false); //T //条件运算符具有自右向左的结合性 boolean flag1 = true?true:false?false:false; boolean flag2 = (true?true:false)?false:false;//自左向右结合性 boolean flag3 = true?true:(false?false:false);//自右向左的结合性 System.out.println(flag1); System.out.println(flag2); System.out.println(flag3); } }