运算符
1.算数运算符
1.1运算符和表达式
-
运算符:对常量或者变量进行操作的符号
-
表达式:用运算符把常量或者变量连接起来符合Java语法的式子就可以成为表达式。不同运算符连接的表达式体现的是不同类型的表达式。
-
举例说明:
int a=10; int b=20; int c=a+b; //+是运算符,并且是算术运算符 //a+b 是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
1.2算术运算符
+:加
-:减
*:乘
/:除
%:取余
public class OperatorDemo01 {
public static void main(String[] args){
//定义两个变量
int a=6;
int b=4;
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(6.0/4);
}
}
1.3字符的“+”操作
'A'值为65,'A'~'Z'是连续的
'a'值为97,'a'~'z'是连续的
'0'值为48,'0'~'9'是连续的
算术表达式中包含多个基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
提升规则:
-
byte类型,short类型和char类型将被提升到int类型。
-
整个表达式的类型自动提升到表达式中最高等级操作数同样的类型,
等级顺序:byte,short,char->int->long->float->double
public class OperatorDemo02 {
public static void main(String[] args){
//定义两个变量
int i=10;
char c='A';//'A'的值为65
char b='a';//'a'的值为97
char d='0';//'0'的值为48
System.out.println(i+c);
System.out.println(i+b);
System.out.println(i+d);
//char ch=i+c;报错,i+c会自动类型提升为int类型
int ch=i+c;
//int d1=10+13.14;报错,10+13.14会自动类型提升为double类型
double d1=10+13.14;
}
}
1.4字符串的“+”操作
当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算。
在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算符。当连续进行“+”操作时,从左到右逐个执行。
public class OperatorDemo03 {
public static void main(String[] args){
System.out.println("it"+"heima");
System.out.println("itheima"+666);
System.out.println("666"+"heima");
System.out.println("黑马"+66+6);
System.out.println(1+99+"黑马");
}
}
2.赋值运算符
public class OperatorDemo04 {
public static void main(String[] args){
//把10赋值给int类型的变量i
int i=10;
System.out.println("i:"+i);
//+=是把左边和右边的数据做加法操作,结果赋值给左边;+=的操作隐含了强制类型转换
i+=20;//即i=i+20
System.out.println("i:"+i);
//注意
short s=10;
s+=20;//不报错,+=包含了强制类型转换,即s=(short)(s+20);
System.out.println("s:"+s);
//s=s+20;报错,不兼容的类型,s+20为int类型与原来short类型的s不兼容
}
}
注意事项:
扩展的赋值运算符隐含了强制类型转换
3.自增自减运算符
注意事项:
-
++ 和--既可以放在变量的后边,也可以放在变量的前面。
-
单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的。
-
参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--,
参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。
public class OperatorDemo05 {
public static void main(String[] args){
//定义变量
int i=10;
System.out.println("i:"+i);
//单独使用
i++;
System.out.println("i:"+i);
++i;
System.out.println("i:"+i);
//参与操作使用
System.out.println("i:"+(++i));//先增后用
System.out.println("i:"+(i++));//先用后增
System.out.println("i:"+i);
}
}
4.关系运算符
注意事项:
关系运算符的结果都是boolean类型,要么事true,要么事false。
千万要区分“==”和“=”
public class OperatorDemo06 {
public static void main(String[] args){
//定义变量
int i=10;
int j=20;
int k=10;
//==
System.out.println(i==j);
System.out.println(i==k);
System.out.println("--------");
//!=
System.out.println(i!=j);
System.out.println(i!=k);
System.out.println("--------");
//>
System.out.println(i>j);
System.out.println(i>k);
System.out.println("--------");
//>=
System.out.println(i>=j);
System.out.println(i>=k);
System.out.println("--------");
//如果不小心把==写成=,会先赋值再输出
System.out.println(i=j);
}
}
5.逻辑运算符
5.1逻辑运算符概述
在数学中,一个数据x,大于3,小于6,我们可以这样来进行表示:3<x<6
在Java中,需要把上面的式子先进行拆解,在进行合并表达。
- 拆解为x>3和x<6
- 合并为x>3&&x<6
&&其实就是一个逻辑运算符。
我们可以说,逻辑运算符,是用来连接关系表达式的运算符。
当然,逻辑运算符也可以连接布尔类型的常量或者变量。
5.2逻辑运算符
public class OperatorDemo07 {
public static void main(String[] args){
//定义变量
int i=10;
int j=20;
int k=30;
//&逻辑与(有false则false)
System.out.println((i>j)&(i>k));//false&false
System.out.println((i<j)&(i>k));//true&false
System.out.println((i>j)&(i<k));//false&true
System.out.println((i<j)&(i<k));//true&true
System.out.println("---------");
//|逻辑或(有true则true)
System.out.println((i>j)|(i>k));//false&false
System.out.println((i<j)|(i>k));//true&false
System.out.println((i>j)|(i<k));//false&true
System.out.println((i<j)|(i<k));//true&true
System.out.println("---------");
//^逻辑异或(相同false,不同true)
System.out.println((i>j)^(i>k));//false&false
System.out.println((i<j)^(i>k));//true&false
System.out.println((i>j)^(i<k));//false&true
System.out.println((i<j)^(i<k));//true&true
System.out.println("---------");
//!逻辑非
System.out.println(i>j);//false
System.out.println(!(i>j));//!false
System.out.println(!!(i>j));//!!false
}
}
5.3短路逻辑运算符
public class OperatorDemo08 {
public static void main(String[] args){
//定义变量
int i=10;
int j=20;
int k=30;
//&&(有false则false.左边有false右边就不执行了)
System.out.println((i>j)&&(i>k));//false&&false
System.out.println((i<j)&&(i>k));//true&&false
System.out.println((i>j)&&(i<k));//false&&true
System.out.println((i<j)&&(i<k));//true&&true
System.out.println("---------");
//||(有true则true.左边有true右边就不执行了)
System.out.println((i>j)||(i>k));//false||false
System.out.println((i<j)||(i>k));//true||false
System.out.println((i>j)||(i<k));//false||true
System.out.println((i<j)||(i<k));//true||true
System.out.println("---------");
//&和&&
System.out.println((i++>100)&(j++>100));//false&false
System.out.println("i1:"+i);
System.out.println("j1:"+j);
System.out.println((i++>100)&&(j++>100));//false&false
System.out.println("i2:"+i);
System.out.println("j2:"+j);
}
}
最常用的逻辑运算符:&&,||,!
6.三元运算符
- 格式:关系表达式?表达式1:表达式2;
- 范例:a>b?a:b;
计算规则:
首先计算关系表达式的值,如果值为true,表达式1的值就是运算结果,如果值为false,表达式2的值就是运算结果。
public class OperatorDemo09 {
public static void main(String[] args){
//定义两个变量
int a=10;
int b=20;
//获取两个数据中较大的值
int max=a>b?a:b;
//输出结果
System.out.println("max:"+max);
}
}
案例1:两只老虎
需求:动物园里有两只老虎。已知两只老虎的体重分别为180 kg、200 kg,请用程序实现判断两只老虎的体重是否相同。
public class TwoTiger {
public static void main(String[] args){
//定义两个变量保存老虎的体重,单位为kg
int Tiger1=180;
int Tiger2=200;
//用三元运算符实现老虎体重的判断
boolean a=(Tiger1==Tiger2)?true:false;
//输出结果
System.out.println(a);
}
}
案例2:三个和尚
需求:一座寺庙里住着三个和尚,已知他们的身高分别为150 cm、210 cm、165 cm,请用程序获取这三个和尚的最高身高。
public class ThreeMonks {
public static void main(String[] args){
//定义三个变量保存三个和尚的身高,单位为 cm
int Monk1=150;
int Monk2=210;
int Monk3=165;
//用三元运算符做比较
int max1=Monk1>Monk2?Monk1:Monk2;
int max=max1>Monk3?max1:Monk3;
//输出结果
System.out.println(max);
}
}