运算符
对字面量或者变量进行操作的符号(如 +、-、*、/)
表达式
用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式。
比如:a + b 这个整体就是表达式。(不同运算符链接的表达式体现的是不同类型的表达式)
算数运算符
+、-、*、/、%
%:取模、取余。
他做的也是除法运算,只不过获取的是余数而已。
例如:10%3 =( 3*3+1)/ 3 = 1
1.整数相除结果只能得到整除,如果结果想要是小数,必须要有小数参数。
2.小数直接参与运算,得到的结果有可能是不精确的。
案例:
System.out.println( 10 / 3);//3
System.out.println(10.0 / 3);//3.3333333333333335
练习:
package day4;
//输入三位数输出每一位的数字
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println("个"+n %10);//个位
System.out.println("十"+(n/10)%10);//十位
System.out.println("百"+(n/100)%10);//百位
}
}
"+"操作的情况
- 数字相加
数字进行运算时,数据类型不同不能运算,需要转换成一样的才能运算
变量的取值范围(由小到大):byte、short、int、long、float、double
隐式转换(自动类型提升):取值范围小的数值——>取值范围大的数值
int a = 10;
double b = a;\\a 隐式转换为double
强制转换:取值范围大的数值——>取值范围小的数值
如果要把一个取值范围大的数据或者变量赋值给另一个取值范围小的变量。是不允许直接操作。
需要进行强制类型转换。要转成什么类型的,那么就在小括号中写什么类型就可以了。
格式: 目标数据类型 变量名 = (目标数据类型)被强转的数据;
package day4;
public class Test5 {
public static void main(String[] args) {
byte num1 = 100;
byte num2 = 100;
byte num3 = (byte)(num1 + num2);
System.out.println(num3);//打印结果为-56,转换数据超过了byte的取值范围
}
}
-取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算。
-byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算。
- 字符串相加
-
当+操作中出现字符串时,此时就是字符串的连接符,会将前后的数据进行拼接,并产生一个新的字符串。
-
当连续进行+操作时,从左到右逐个执行的。(有字符串参与就是拼接,没有就是算术运算)
"123"+ 123 = "123123"
public class Test6 {
public static void main(String[] args) {
System.out.println(1+2+"sbc"+2+1);//字符串出现时候+才为拼接,所以结果为3sbc21
}
}
- 字符相加
当+操作中出现了字符,会拿着字符到计算机内置的ASCII码表中去查对应的数字,然后再进行计算。
public class Test7 {
public static void main(String[] args) {
char c = 'a';
int res = c + 0;
System.out.println(res);//a的ascll码表对应值为97故res的值为97
}
}
自增自减运算符
符号 | 作用 | 说明 |
++ | 加 | 变量值+1 |
-- | 减 | 变量值-1 |
注意:++和--既可以放在变量之前也可以放在变量之后,区别是放在变量之后先使用再++,放在变量之前先++再使用
赋值运算符和关系运算符
赋值运算符
符号 | 作用 | 说明 |
= | 赋值 | int a = 10 |
+= | 加后赋值 | a+=b;a = a+b |
-= | 减后赋值 | .... |
*= | 乘后赋值 | .... |
/= | 除后赋值 | .... |
%= | 取模后赋值 | .... |
运算过程:就是把等号右边的结果赋值给左边的变量(左边的变量是什么类型就强制转换为什么类型)
关系运算符
符号 | 说明 |
== | 相等,成立为true,不成立为false |
!= | 不相等 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
逻辑运算符
符号 | 作用 | 说明 |
& | 且 | 并且、两边为真结果为真 |
| | 或 | 或者、两边为假结果为假 |
^ | 异或 | 相同为false、不同为true |
! | 非 | 取反 |
public class Test12 {
public static void main(String[] args) {
System.out.println(true ^ true);//false
System.out.println(true ^ false);//true
}
}
短路逻辑运算符
&& 短路与:前面错误直接判断不再进行后续判断;效率高于&
| | 短路或:两边为假结果才为假
注意:短路逻辑表达式具有短路效果,当左边表达式能确定最终结果时候右边就不再继续执行
三元运算符
需求:定义一个变量记录两个整数的较大值
格式:关系表达式 ? 表达式1 :表达式2 ;
规则:若关系表达式为真(true),执行表达式1,反之执行表达式2
作用:可以进行判断,根据判断的结果得到不同的内容
import java.util.Scanner;
public class Test20 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int people1 = sc.nextInt();
int people2 = sc.nextInt();
int people3 = sc.nextInt();
int temp = people1 > people2? people1:people2;
int taller = people3 >temp? people3:temp;
System.out.println(taller);
}
运算符优先级
括号优先于所有!