一:运算符和表达式
Ⅰ:运算符:
对字面量或者变量进行操作的符号
Ⅱ:表达式
用运算符把字面量或者变量连接起来,符合Java的语法的式子,就可以成为表达式
不同运算符连接的表达式体现的是不同类型的表达式
Ⅲ:举例说明
int a = 10;
int b = 20;
int c = a+ b;
+ :是运算符,并且是算术运算符
a+b : 是表达式,由于+是算数运算符,所以这个表达式叫算数运算符
①:算数运算符(arithmetic operator)
public class ArithmeticOperator {
public static void main(String[] args) {
//+
System.out.println(5+2); //7
//-
System.out.println(5-2); //3
//* shift + 8
System.out.println(5*2); //10
// 除 /
System.out.println(5/2); //2 取商,不要余数
/*
如果由小数在其内参与运算会出现数字不准确
*/
// %
System.out.println(5%2); //1 取的是余数,不要商
}
}
1.2,除跟取模
public class ArithmeticOperatorDemo01 {
public static void main(String[] args) {
// 除法
/*
1、整数参与计算,结果只能得到整数
2、小数参与计算,结果可能不是精确的,如果需要精确计算,需要用到后面的知识
*/
System.out.println( 10 / 2); // 5
System.out.println( 10 / 3 ); // 3
System.out.println(10.0 / 3); //3.3333333333
//取模,实际上也是除法运算,只不过得到的是余数
System.out.println( 10 % 2); //0
System.out.println(10 % 3); //1
//场景
//用来判断 A是否可以被B整除
//可以判断该数是否为整数
}
}
1.3,练习
import java.util.Scanner;
public class ArithmeticOperatorTest {
public static void main(String[] args) {
/*
键盘录入一个三位数,将他拆分为个位数、十位数,百位后,打印在控制台
*/
Scanner input = new Scanner(System.in);
System.out.println("请输入这个三位数");
int nextInt = input.nextInt();
int ge = nextInt % 10;
System.out.println("这个三位数的个位是:" + ge);
int shi = nextInt / 10 % 10;
System.out.println("这个三位数的十位是:" + shi);
int bai = nextInt / 100 % 10;
System.out.println("这个三位数的百位是:" + bai);
}
}
1.4:"+"的三种情况
1.4.1:数字相加
- 数字进行运算的时候,数据类型不一致的时候,需要转换成一致的进行运算
- 隐式转换:(自动类型提升)
- ·取值范围小的数值转成取值范围大的数值
隐式转换规则
取值范围小的,和取值范围大的进行计算,小的会先提升为大的,在进行计算
byte\short\char类型的数据在计算的时候,会自动提升为int类型,在计算
数据类型不一致的时候,是不可以进行计算的
byte–>short–>int–>long–>float–>double
//练习
byte b1 = 10;
byte b2 = 20;
数据类型/int result = b1 + b2;
int i = 10;
long n 100L;
double d = 20.0;
数据类型/double result = i + n + d;
byte b = 10;
short s = 20;
long n = 100L;
数据类型/long result = b + s + n
- 强制转换
如果把一个取值范围大的数值,赋值给取值范围小的变量,是不允许赋值的,如果一定要做就需要加入强制转换
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据
eg: int a = 300
byte b =(byte) a; - 取值范围大的数值转换成取值范围小的数值
//练习
public class ArithmeticOperatorDemo02 {
public static void main(String[] args) {
//如果数据过大,进行转换就会出现错误
byte b1 = 10;
byte b2 = 20;
byte result = (byte) (b1 + b2);
System.out.println(result); //30
}
}
1.4.2:字符串相加
- 字符串"+" 操作
当”+“ 操作中出现字符串,这个”+“就是字符串连接符,而不是算数运算符了,会将前后拼接,产生一个新的字符串
//练习
System.out.println(3.7+"abc"); //3.7abc
System.out.println("abc"+true); //abctrue
System.out.println('中' + "abc" +true); //中abctrue
------------------------------------------------------
int age = 18;
System.out.println("我的年龄是" + age + "岁"); //我的年龄是18岁
System.out.println("我的年龄是" + "age" + "岁"); //我的年龄是age岁
------------------------------------------------------
System.out.println(1+2+"abc"+2+1); //3abc21
1.4.3:字符相加
计算规则
- 当 字符 + 字符 时,会把字符通过ASCLL码表查询到对应的数字进行计算
- 当 字符 + 数字 时,会把字符通过ASCLL码表查询到对应的数字进行计算
//练习
a = 97;
A = 65;
------------------------------------
看代码说结果
System.out.println(1 + 'a'); //98
System.out.println('a' + "abc"); //aabc
总结:/ 和 % 的区别:两个数据做除法,/ 取结果的商,% 取结果的余数,整数操作只能得到整数,要想得到小数,必须有浮点数参与运算
②:自增自减
基本用法:
符号 | 作用 | 说明 |
---|---|---|
++ | 加 | 变量的值加1 |
- - | 减 | 变量的值减1 |
注意事项
++和–可以出现在前面,可以出现在后面
++和 – 无论是放在前面还是后面,单独写一行结果是一样的
public class ArithmeticOperatorDemo04 {
public static void main(String[] args) {
//++和--
int a = 10;
a++;
System.out.println(a); //11
++a;
System.out.println(a); //12
a--;
System.out.println(a); //11
--a;
System.out.println(a); //10
}
}
参与计算
int a = 10;
int b = a++; 先用后加 a = 11; b = 10;
int a = 10;
int b = ++a 先加后用 a = 11 ; b = 11;
//练习
public class ArithmeticOperatorDemo04 {
public static void main(String[] args) {
int x = 10;
int y = x++;
int z = ++x;
System.out.println("x"+ x);//12
System.out.println("y"+ y);//10
System.out.println("z"+ z);//12
}
}
③:赋值运算符
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | int a = 10 将10赋值给变量a |
+= | 加后赋值 | a += b 将a+b的值给a |
-= | 减后赋值 | a -= b 将a-b的值给a |
*= | 乘后赋值 | a = b 将ab的值给a |
/= | 除后赋值 | a /= b 将a/b的商给a |
%= | 取余后赋值 | a %= b 将a/b的余数给a |
public class ArithmeticOperatorDemo01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a += b; //相当于 a = a + b
System.out.println(a); //30
System.out.println(b); //20
//强转类型
short s = 10;
s += 1; //相当于 s = (short)(s + 1);
System.out.println(s); //11
}
}
注意事项:拓展的赋值运算符隐含了强制类型转换
④:关系运算符
关系运算也叫比较运算符
符号 | 说明 |
---|---|
== | a==b 判断a和b的值是否相等,成立为true,不成立为false |
!= | a!=b 判断a和b的值是否不相等,成立为true,不成立为false |
> | a>b 判断a是否大于b,成立为true,不成立为false |
>= | a>=b 判断a是否大于等于b,成立为true,不成立为false |
< | a<b 判断a是否小于b,成立为true,不成立为false |
<= | a<=b 判断a是否小于等于b,成立为true,不成立为false |
注意事项:关系运算符的结果是boolean类型,要么是true,要么是false,千万不要把"==" 写成"="
//练习
import java.util.Scanner;
public class practice {
public static void main(String[] args) {
/*
某一次你跟你的相亲对象在餐厅相亲,这个时候需要比你你们的时髦度
来判断你们是否能在一起、如果你的时髦杜大于女方时髦度,就输出true,标示能在一起
注意:时髦度只能在(0-9),不能输入其他的
*/
Scanner input = new Scanner(System.in);
System.out.println("请输入你的时髦度");
int my = input.nextInt();
System.out.println("请输入女方的时髦度");
int girl = input.nextInt();
boolean result = my > girl ;
System.out.println(result);
}
}
⑤:逻辑运算符
5.1:什么是逻辑运算符?
在数学中,一个数据X,大于5,小于15,我们可以表示: 5<x<15
在Java中需要解析拆解,在进行合并
拆解为 : x < 15 和 x > 5
合并后: x >5 & x< 15
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与(且) | 并且,两边都为真,结果才为真 两边都满足 |
| | 逻辑或 | 或者,两边都为假,结果才为假 两边满足一个 |
^ | 逻辑异或 | 相同为false,不同为true |
! | 逻辑非 | 取反 |
public class LogicOperator {
public static void main(String[] args) {
//并且 &
System.out.println(true & true); //true
System.out.println(true & false); // false
System.out.println(false & false); //false
System.out.println(true & false); //false
//或者 |
System.out.println(true | true); //true
System.out.println(true | false); // true
System.out.println(false | false); // false
System.out.println(false | true); // true
//异或 ^
System.out.println(true ^ true); //false
System.out.println(true ^ false); // true
System.out.println(false ^ false); // false
System.out.println(false ^ true); // true
//非 取反 !
//提示:取反的感叹号不要写多次,要么不写,要么只写一次
System.out.println(!true); //false
System.out.println(!false); // true
}
}
⑥:短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 结果和&相同,但是有短路效果 |
II | 短路或 | 结果和 I 相同,但是有短路效果 |
public class LogicOperatorDemo01 {
public static void main(String[] args) {
/*
&&
结果跟&是一样的,两边都为真结果为真
*/
System.out.println(true && true); //true
System.out.println(false && true); //false
System.out.println(false && false);//false
System.out.println(true && false);//false
/*
||
结果跟|是一样的,两边都为假结果才为假
*/
System.out.println(true || true); //true
System.out.println(false || true); //true
System.out.println(false || false);//false
System.out.println(true || false);//true
}
}
短路逻辑运算符拥有短路效果
当左边的表达式能确定最终结果,右边的表达式就不会执行
int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;
System.out.println(result); //false
System.out.println(a); //11
System.out.println(b); //10
注意事项
- & | :无论左边表达式是true还是false,右边表达式都执行
- && || :如果左边能确定整个表达式的结果,右边则不执行
- && :左边表达式为false,右边不管真假,结果一定为false
- | |:左边表达式为true,右边不管真假,结果一定为true
- 短路语,在左边执行,右边不执行,大大提高了效率
- 最常用的逻辑运算符:&& || !
//练习
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
/*
数字6是一个真正的伟大的数字,键盘录入两个整数
如果其中一个为6,最终的结果为true
如果他们的和为6的倍数,最终结果输出true
其他情况都是false
*/
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个整数");
int number1 = input.nextInt();
System.out.println("请输入第二个整数");
int number2 = input.nextInt();
boolean result = number1 == 6 || number2 ==6 || (number1 + number2) % 6 ==0;
System.out.println(result);
}
}
⑦:三元运算符
三元运算符也称三元表达式
格式为: 关系表达式 ? 表达式1 : 表达式2
范例:
int a = 10;
int b = 20;
int result = a > b ? a : b ;
System.out.println(result); // b = 20大
注意事项
首先计算关系表达式的值
如果值为true,则表达式1的值大
如果为false,则表达式2的值大
//练习
import java.util.Scanner;
public class LogicOperatorDemo01 {
public static void main(String[] args) {
/*
键盘录入随意两只老虎的体重并比较大小,最大的老虎是多少斤
*/
Scanner input = new Scanner(System.in);
System.out.println("请输入第一只老虎的体重");
int tiger1 = input.nextInt();
System.out.println("请输入第二只老虎的体重");
int tiger2 = input.nextInt();
int result = tiger1 > tiger2 ? tiger1 : tiger2;
System.out.println("老虎体重最大是" + result + "斤");
}
}
public class LogicOperatorDemo02 {
public static void main(String[] args) {
/*
定义三个和尚的身高,请用程序输出最高
*/
int height1 = 185;
int height2 = 196;
int height3 = 201;
int max = (height1 > height2 ? height1 : height2) > height3 ?
(height1 > height2 ? height1 : height2) : height3 ;
System.out.println(max);
//或者这样写
第一种看不懂的可以看第二种
int max1 = height1 > height2 ? height1 : height2;
int max2 = max1 > height3 ? max1 : height3;
System.out.println(max2);
}
}