Java 运算符和分支结构
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:
- 短路逻辑运算
- 赋值运算
- 递增递减运算
- 三目运算
- if-else
- switch-case
- java运算符优先级
赋值语句
实例
public class Test2 {
public static void main(String[] args) {
//赋值语句 += -= *= /= %=
int a=100;
a +=10;//a=a+10; a=110;
System.out.println("a="+a);//a=110;
a -=10;//a=a-10; a=110-10;
System.out.println("a="+a);//a =100;
int b=100;
b *=10;//b=b*10; b=100*10;
System.out.println("b="+b);//b=1000
b /=10;//b=b/10; b=1000/10;
System.out.println("b="+b);//b=100
int c=100;
c %=10;//c=c%10; c=100%10
System.out.println("c="+c);//c=0
}
}
public static void main(String[] args) {
//赋值语句 += -= *= /= %=
int a=100;
a +=10;//a=a+10; a=110;
System.out.println("a="+a);//a=110;
a -=10;//a=a-10; a=110-10;
System.out.println("a="+a);//a =100;
int b=100;
b *=10;//b=b*10; b=100*10;
System.out.println("b="+b);//b=1000
b /=10;//b=b/10; b=1000/10;
System.out.println("b="+b);//b=100
int c=100;
c %=10;//c=c%10; c=100%10
System.out.println("c="+c);//c=0
}
}
自增自减运算符
1、自增(++)自减(--)运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数。
实例
public static void main(String[] args){//程序的入口
// //递增符号(自增符号) ++ 递减符号(自减符号)--
int a=10;
a++;//a=a+1;a=10+1;
System.out.println("a="+a);//a=11
int b=10;
++b;//b=b+1; b=10+1;
System.out.println("b="+b);//b=11
int c=10;
c--;//c=c-1; c=10-1;
System.out.println("c="+c);//c=9;
int d=10;
--d;//d=d-1;d=10-1;
System.out.println("d="+d);
}
}
递增符号 a++与++a的区别
Test.java 文件代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
//递增符号 a++与++a的区别
int a=10;
//a++ 先操作再自增
//1.System.out.println(a) 2.a=a+1; a=10+1
System.out.println(a++);//10 a++ a=a+1 a=10+1
System.out.println("a="+a);//a=11
int b=10;
//++b 先自增后操作
//1.b=b+1 b=11 2,System.out.println(b)
System.out.println(++b);//11 ++b b=b+1 b=10+1
int c=10;
int d=c++;//1.int d=c; d=10 2.c=c+1; c=11
System.out.println("c="+c);//c=11
System.out.println("d="+d);//d=10
}
}
短路逻辑
Test.java 文件代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
//短路逻辑与自增符号
int i=100,j=200;
//短路逻辑 &&
//false&& =false &&符号前面如果是false,&&后面的表达式不执行
boolean b=(i>j)&&(i++>100);//false&&false i=i+1; i=101
System.out.println("b="+b);//false
System.out.println("i="+i);//100
//短路逻辑 ||
//true|| =true ||符号前面如果是true,||后面的表达式不执行
boolean c=i>0||++j>200;//true||true 201>200
System.out.println("c="+c);//true
System.out.println("j="+j);//200
//表达式
int d,e,f,g;
d=e=f=100;
System.out.println(g=100);//g=100表达式之值即为所赋之值100
}
}
递增递减运算符
实例
实例
public static void main(String[] args) {
// TODO Auto-generated method stub
//递增符号 a++与++a的区别
int a=10;
//a++ 先操作再自增
//1.System.out.println(a) 2.a=a+1; a=10+1
System.out.println(a++);//10 a++ a=a+1 a=10+1
System.out.println("a="+a);//a=11
int b=10;
//++b 先自增后操作
//1.b=b+1 b=11 2,System.out.println(b)
System.out.println(++b);//11 ++b b=b+1 b=10+1
int c=10;
int d=c++;//1.int d=c; d=10 2.c=c+1; c=11
System.out.println("c="+c);//c=11
System.out.println("d="+d);//d=10
}
}
短路逻辑运算符
当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
实例
public static void main(String[] args) {
// TODO Auto-generated method stub
//短路逻辑与自增符号
int i=100,j=200;
//短路逻辑 &&
//false&& =false &&符号前面如果是false,&&后面的表达式不执行
boolean b=(i>j)&&(i++>100);//false&&false i=i+1; i=101
System.out.println("b="+b);//false
System.out.println("i="+i);//100
//短路逻辑 ||
//true|| =true ||符号前面如果是true,||后面的表达式不执行
boolean c=i>0||++j>200;//true||true 201>200
System.out.println("c="+c);//true
System.out.println("j="+j);//200
//表达式
int d,e,f,g;
d=e=f=100;
System.out.println(g=100);//g=100表达式之值即为所赋之值100
}
}
解析: 该程序使用到了短路逻辑运算符(&&),首先判断 a<4 的结果为 false,则 b 的结果必定是 false,所以不再执行第二个操作 a++<10 的判断,所以 a 的值为 5。
三目运算
实例
Test.java 文件代码:
public static void main(String[] args) {
//三目运算
int a=100,b=200;
//int flag=false?3:4;
int flag=a>b?3:4;//boolean?表达式1:表达式2; boolean为true选择表达式1,为false选择表达式2
System.out.println("flag="+flag);//flag=4
int c=-1;
String r=c>0?"正数":(c==0?"0":"负数");
System.out.println("r="+r);//r="负数"
//取两个数的最大值
int d=6,e=8;
int max=d>e?d:e;//false?d:e;
System.out.println("最大值max为:"+max);
}
}
if-else条件语句
实例
Test.java 文件代码:
public class Test8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// if条件语句
double time = 10.00;
if (time >= 9.00) {// if(boolean){} boolean为true执行if里面的语句块
System.out.println("迟到了");
}
// if-else语句
int num = 2;
if (num > 2) {// false
System.out.println(num + "大于2");
} else {// num<=2
System.out.println(num + "小于等于2");// <=2
}
// if -else if
double score;
System.out.println("请输入考生考试成绩score:");
Scanner scanner = new Scanner(System.in);
score = scanner.nextDouble();
if (score < 0 || score > 100) {//score<0 score>100
System.out.println("输入的成绩不在范围之内");
} else if (score >= 90) {
System.out.println("优");
} else if (score >= 80) {// 80<=score<90
System.out.println("良");
} else if (score >= 70) {// 70<=score<80
System.out.println("中");
} else if (score >= 60) {// 60<=socre<70
System.out.println("及格");
} else {// score<60
System.out.println("不及格");
}
scanner.close();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// if条件语句
double time = 10.00;
if (time >= 9.00) {// if(boolean){} boolean为true执行if里面的语句块
System.out.println("迟到了");
}
// if-else语句
int num = 2;
if (num > 2) {// false
System.out.println(num + "大于2");
} else {// num<=2
System.out.println(num + "小于等于2");// <=2
}
// if -else if
double score;
System.out.println("请输入考生考试成绩score:");
Scanner scanner = new Scanner(System.in);
score = scanner.nextDouble();
if (score < 0 || score > 100) {//score<0 score>100
System.out.println("输入的成绩不在范围之内");
} else if (score >= 90) {
System.out.println("优");
} else if (score >= 80) {// 80<=score<90
System.out.println("良");
} else if (score >= 70) {// 70<=score<80
System.out.println("中");
} else if (score >= 60) {// 60<=socre<70
System.out.println("及格");
} else {// score<60
System.out.println("不及格");
}
scanner.close();
}
}
switch-case语句结构
看下面的例子:
public class Test9 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//switch-case语句块
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要选择的功能 1.充值话费 2.查询余额 3.人工服务");
int num=scanner.nextInt();//接收输入的数
//switch-case
switch(num){
case 1:
System.out.println("充值话费");
break;//终止中断当前的case语句块
case 2:
System.out.println("查询余额");
break;
case 3:
System.out.println("人工服务");
break;
default:
System.out.println("您输入的数字不在服务区");
break;
}
scanner.close();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//switch-case语句块
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要选择的功能 1.充值话费 2.查询余额 3.人工服务");
int num=scanner.nextInt();//接收输入的数
//switch-case
switch(num){
case 1:
System.out.println("充值话费");
break;//终止中断当前的case语句块
case 2:
System.out.println("查询余额");
break;
case 3:
System.out.println("人工服务");
break;
default:
System.out.println("您输入的数字不在服务区");
break;
}
scanner.close();
}
Java运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | + + - !〜 | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | >> = << = | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |