四、运算符和表达式
4.1 算术运算
4.1.1 使用%运算符
Java中的运算符除了加减乘除外,还有取余(%)运算以及自增(++)自减(–) 取余(取模),取余数,可用于整数、char和浮点型。
//1.取余
int n = 255;
char n2 = 'A';
double n3 = 16.8;
System.out.println(n3%8);//0.8000000000000007
4.1.2 自增和自减运算
前置自增自减:先自增自减后运算
后置自增自减:先运算后自增自减
int a = 10,b=20;
int c1 = a ++;
int c2 = ++ b;
System.out.println("a=" + a + ",b= "+b+",c1=" + c1 + ",c2=" + c2); //11 21 10 21
结论: 变量无论前置还是后置运算其结果一定为:+1
只在使用它的时候考虑其前置或后置规则
4.2 关系运算符
包括>、<、==、>=、<=、!=
int max = 10;
int num = 9;
boolean b1 = max > 15;//false
boolean b2 = num%2 == 1;//true
4.3 逻辑运算符
4.3.1 逻辑运算:&&逻辑与(且)、||逻辑或、!逻辑非
结论:
与运算一假必假;
或运算一真必真。
4.3.2 逻辑运算符的使用
//4.逻辑运算符
//与
int score = 80;
boolean res1 = score >= 60 && score <=90;//true
//或
boolean flag = true;
int i = 200;
boolean res2 = flag || (i>=0 && i <10);//true
//非
res2 = !flag || (i>=0 && i <10);//false
4.3.3 短路逻辑
与运算: 一假必假 指:当第一个表达式为假时后面的表达式就不会参与运算了
或运算: 一真必真 指:当第一表达式为真时后面的表示式不参与运算了
int i = 100, j = 200;
boolean b1 = (i > j) && (i++ > 100); //第一个条件不满足,第二个条件直接不参与
//第一个条件满足,第二个条件才参与判断
System.out.println(b1); // f
System.out.println(i); // 100
boolean b2 = i > 0 || j++ > 200; //第一个条件满足,第二个条件直接不参与
//第一个条件不满足,第二个条件才参与判断
System.out.println(b2); // t
//以第一个判断为主要的,
System.out.println(j); // 200
4.4 赋值运算
4.4.1 使用“=”进行赋值运算
赋值运算符一定要从右边表达式看向左边。
int i;
i=1; //表示将1赋值给i
//赋值运算符
int x,y,c;
x = y = c = 100;
//将100赋值给c --> = (c = 100)
4.4.2 使用扩展赋值表达式
4.5 字符串的拼接
“+”可以实现字符串的拼接 也可实现字符串与其他类型相连接。
//字符串连接符
int in = 100;
String msg = "in = " + in;
System.out.println(msg);//in = 100
msg = "" + 100 + 200;
//String s = "" + 100; == //String s="100";
//s + 200; // String s = 100200
System.out.println(msg);//100200 拼接
msg = 100 + "" + 200;
System.out.println(msg);//100200 拼接
msg = 100 + 200 + "";
System.out.println(msg);//300 int类型先运算后拼接
msg = 100 + 200 + "" + (300 + 400);//300700 先运算两边再拼接
System.out.println(msg);
结论:
1、主要看字符串的位置,字符串与其他类型或字符串类型,那么“+”一定为拼接
2、如果是同类型先相加,那么“+”为运算符,再去拼接其他字符串
4.6 三目运算符(重点–源码里能见到)
4.6.1 使用三目运算符
三目运算符(条件运算符):boolean表达式?表达式1:表达式2;
解释:boolean表达式为true,则执行表达式1,否则执行表达式2.
- 结构:(条件表达式)?表达式1:表达式2;
- 当条件表达式为true:执行表达式1;
- 当条件表达式为false:执行表达式2;
两个数的比较:
String s = 65 > 60 ? "及格" : "不及格";//及格
三个数的比较:
int a = 12;
int b = 15;
int c = 21;
//方法一:
int min = (a<b)?((a>c)?c:a):((b>c)?c:b); //12
//方法二(尽量以此方法为主):
int min1 = (a>b)?b:a;
int min2 = (min1>c)?c:min1; //12
4.6.2 三目的嵌套
三目运算符可以嵌套使用,表达式1和表达式2的结果可以为嵌套三目的boolean表达式
int a = -3;
String r = a > 0 ? "正数" : (a == 0 ? "0" : "负数");//负数
4.6.3 案例(输入年份,判断是否为闰年)
案例一:接受用户输入年份,判断是否为闰年。
1.年份能被4整除,且不能被100整除的是闰年
2.年份能被400整除的是闰年。
//方法一:
//1.接收年份
System.out.print("请输入年份:");
Scanner scan = new Scanner(System.in);
//2.获取年份
int year = scan.nextInt();
//3.判断条件
String result = (year % 4 == 0 && year % 100 != 0) ||
year % 400 == 0 ? "闰年" : "平年";
//4.输出结果
System.out.println(result);
//方法二:
System.out.print("请输入年份:");
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
if((year%4==0&&year%100!=0)||year%400==0) {
System.out.println(year+"是闰年");
}else {
System.out.println(year+"是平年");
}
4.7 位运算
4.7.1 ^(异或)
package cn.aku.Chapter5_2;
/**
* 数值的交换
*/
public class My1Exchange {
int num1 = 12;
int num2 = 21;
public void show(){
System.out.println("num1 = "+num1+",num2 = "+num2);
//方法一
int temp = num1;
num1 = num2;
num2 = temp;
System.out.println("num1 = "+num1+",num2 = "+num2);
//方法二
//优点:不用设置临时变量
//缺点:两数相加会超出数值类型的范围
// 除法时,被除数不能为0
// 局限性(只能是数值类型)
num1+=num2;
num2=num1-num2;
num1=num1-num2;
System.out.println("num1 = "+num1+",num2 = "+num2);
//方法三:位运算符(^:异或)
//与方法二基本相同但是没有超出数值类型的范围这一条
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
System.out.println("num1 = "+num1+",num2 = "+num2);
}
}