运算符是对常量或者变量进行操作的符号,Java的运算符有六类:算数运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符,三元运算符、用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。下面来具体看一下:
1.算数运算符和算术运算符的表达式
举例说明:
inta=10;intb=20;intc=a+b;
+:是运算符,并且是算术运算符。a+b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。
注意:/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
inta=10;intb=3;System.out.println(a/b);//输出结果3System.out.println(a%b);//输出结果1
字符的“+”操作
char类型参与算术运算,使用的是计算机底层对应的十进制数值。需要我们记住三个字符对应的数值:
'a'--97a-z是连续的,所以'b'对应的数值是98,'c'是99,依次递加
'A'--65A-Z是连续的,所以'B'对应的数值是66,'C'是67,依次递加
'0'--480-9是连续的,所以'1'对应的数值是49,'2'是50,依次递加
//可以通过使用字符与整数做算术运算,得出字符对应的数值是多少charch1='a';System.out.println(ch1+1);//输出98,97+1=98charch2='A';System.out.println(ch2+1);//输出66,65+1=66charch3='0';System.out.println(ch3+1);//输出49,48+1=49
算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
提升规则:
byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。
整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型
等级顺序:byte,short,char-->int-->long-->float-->double
例如:
byteb1=10;byteb2=20;//byteb3=b1+b2;//该行报错,因为byte类型参与算术运算会自动提示为int,int赋值给byte可能损失精度inti3=b1+b2;//应该使用int接收byteb3=(byte)(b1+b2);//或者将结果强制转换为byte类型-------------------------------intnum1=10;doublenum2=20.0;doublenum3=num1+num2;//使用double接收,因为num1会自动提升为double类型
tips:正是由于上述原因,所以在程序开发中我们很少使用byte或者short类型定义整数。也很少会使用char类型定
义字符,而使用字符串类型,更不会使用char类型做算术运算。
当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。
System.out.println("itheima"+666);//输出:itheima666
在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。
System.out.println(1+99+"年黑马");//输出:199年黑马System.out.println(1+2+"itheima"+3+4);//输出:3itheima34//可以使用小括号改变运算的优先级System.out.println(1+2+"itheima"+(3+4));//输出:3itheima7
2.赋值运算符
赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。
注意:扩展的赋值运算符隐含了强制类型转换。
shorts=10;s=s+10;//此行代码报出,因为运算中s提升为int类型,运算结果int赋值给short可能损失精度s+=10;//此行代码没有问题,隐含了强制类型转换,相当于s=(short)(s+10);
3.自增自减运算符
注意事项:
++和--既可以放在变量的后边,也可以放在变量的前边。
单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的。
参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。
参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。
最常见的用法:单独使用。
inti=10;i++;//单独使用System.out.println("i:"+i);//i:11intj=10;++j;//单独使用System.out.println("j:"+j);//j:11intx=10;inty=x++;//赋值运算,++在后边,所以是使用x原来的值赋值给y,x本身自增1System.out.println("x:"+x+",y:"+y);//x:11,y:10intm=10;intn=++m;//赋值运算,++在前边,所以是使用m自增后的值赋值给n,m本身自增1System.out.println("m:"+m+",m:"+m);//m:11,m:11
4.关系运算符
关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。
注意事项:关系运算符的结果都是boolean类型,要么是true,要么是false。
千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。
inta=10;intb=20;System.out.println(a==b);//falseSystem.out.println(a!=b);//trueSystem.out.println(a>b);//falseSystem.out.println(a>=b);//falseSystem.out.println(a<b);//trueSystem.out.println(a<=b);//true//关系运算的结果肯定是boolean类型,所以也可以将运算结果赋值给boolean类型的变量booleanflag=a>b;System.out.println(flag);//输出false
5.逻辑运算符
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是true或false。
//定义变量inti=10;intj=20;intk=30;//&“与”,并且的关系,只要表达式中有一个值为false,结果即为falseSystem.out.println((i>j)&(i>k));//false&false,输出falseSystem.out.println((i<j)&(i>k));//true&false,输出falseSystem.out.println((i>j)&(i<k));//false&true,输出falseSystem.out.println((i<j)&(i<k));//true&true,输出trueSystem.out.println("--------");//|“或”,或者的关系,只要表达式中有一个值为true,结果即为trueSystem.out.println((i>j)|(i>k));//false|false,输出falseSystem.out.println((i<j)|(i>k));//true|false,输出trueSystem.out.println((i>j)|(i<k));//false|true,输出trueSystem.out.println((i<j)|(i<k));//true|true,输出trueSystem.out.println("--------");//^“异或”,相同为false,不同为trueSystem.out.println((i>j)^(i>k));//false^false,输出falseSystem.out.println((i<j)^(i>k));//true^false,输出trueSystem.out.println((i>j)^(i<k));//false^true,输出trueSystem.out.println((i<j)^(i<k));//true^true,输出falseSystem.out.println("--------");//!“非”,取反System.out.println((i>j));//falseSystem.out.println(!(i>j));//!false,,输出true
6.短路逻辑运算符
在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都
计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为true,右边的表达式
将不再参与运算。
逻辑与&,无论左边真假,右边都要执行。
短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。
逻辑或|,无论左边真假,右边都要执行。
短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。
inta=10;intb=3;System.out.println(a/b);//输出结果3System.out.println(a%b);//输出结果10
7.三元运算符
三元运算符语法格式:
inta=10;intb=3;System.out.println(a/b);//输出结果3System.out.println(a%b);//输出结果11
解释:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。其逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。
举例:
inta=10;intb=3;System.out.println(a/b);//输出结果3System.out.println(a%b);//输出结果12
三元运算符案例:
①需求:动物园里有两只老虎,已知两只老虎的体重分别为180kg、200kg,请用程序实现判断两只老虎的体重是否相同。
inta=10;intb=3;System.out.println(a/b);//输出结果3System.out.println(a%b);//输出结果13
②需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。
inta=10;intb=3;System.out.println(a/b);//输出结果3System.out.println(a%b);//输出结果14