运算符:
就是对常量或则变量进行操作的符号
比如:+ - * /
表达式:
用运算符把常量或则变量链接起来的,符合Java语法的式子就是表达式
比如:a + b这个整体就是表达式
而其中**+**是算数运算符的一种,所以这个表达式也称之为算数表达式
2. 算数运算符
分类:
+ - * / %
运算特点:
+ - * : 跟小学数学中一模一样没有任何区别
注意点:
1. 整数相除结果只能得到整除,如果结果想要是小数,必须要有小数参数
1. 小数直接参与运算,得到的结果有可能是不精确的
1. 取模、取余:他做的也是除法运算,只不过获取的是余数而已
3. 隐式转换
概念
也叫自动类型提升(也就是类型自动转换)
就是把一个取值范围小的数据或则变量,赋值给另一个取值范围大的变量,此时不需要我们额外写代码单独实现,是程序自动帮我们完成的。
简单的记忆:
就是小的给大的,可以直接给(例如:你一个1L的水要倒入8L的水缸里,那是可以直接倒入的,那反过来,8L的水倒入1L的水缸,那是无法倒入的)
两种提升规则:
- 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,在进行运算。
- byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
取值范围从小到大的关系:
byte ---- short ---- int ---- long ---- float — double
4. 强制转换
概念:
如果要把一个取值范围大的数据或则变量赋值给另一个取值范围小的变量,是不允许直接操作的。
如果一定要这么干,就需要加入强制转换。
书写格式:
目标数据类型 变量名= (目标数据类型) 被墙砖的数据;
简单理解:
要转成什么类型的,那么就在小括号中写什么类型就可以了
案例:
public class OperatorDemo2{
public static void main(String[] args) {
double a = 12.3;
int b = (int)a;
Systemt.out.println(b);//12
}
}
注意点:
强制转换有可能会导致数据发生错误。(数据的精度丢失)
5. 字符串的 + 操作
核心技巧:
- 当+操作中出现字符串时,此时就是字符串的连接符,会将前后的数据进行拼接,并产生一个新的字符串
- 当连续进行+ 操作时,从左到右逐个执行的;
- 例如:123 + “abc”; 此时有一个字符串,就会变成拼接
- 例如: 1 + 2 + “abc”; 此时就会变成 1+2=3 然后再拼接abc 最终 3abc
6. 字符的+操作
规则:
当+操作中出现了字符,会拿着字符到计算机内置的ASCII码表中去查对应的数字,然后再进行计算
案例:
char c = 'a';
int result = c + 0;
Systemt.out.println(result); // 97
ASCII码表中:
‘a’ ------ 97
‘A’ ------- 65
7. 算术运算符的总结
分类:
+ - * / % 这些操作都跟小学数学几乎一模一样
注意点:
- / 和 % 的区别:他们两个都是做除法运算的,/取结果的商。% 取结果的余数。
- 整数操作只能得到整数,如果想要得到小数,必须有浮点数参与运算。
8. 自增自减运算符
分类:
++ 自增运算符
-- 自减运算符
++:就是把变量里面的值+1
–:就是把变量里面的值-1
使用方式:
- 放在变量的前面,我们就做先++。比如:++a
- 放在变量的后面,我们叫做后++。比如:a++
注意点:
不管是先++,还是后++,单独写在一行的时候,运算结果都是一模一样的
自增自减运算符的应用场景:
某些情况下,变量需要进行加1或则减1的时候使用
比如:过生日多一岁,就用到了自增运算符
比如:购物商场中,选择商品数量,也用到了自增或则自减运算符
比如:统计很多数据中,有多少个数据满足要求,也用到了自增运算符
9. 关系运算符
又叫比较运算符,其实就是拿着左边跟右边进行判断而已
分类:
符号 | 解释 |
---|---|
== | 就是判断左边跟右边是否相等,如果成立就是true,如果不成立就是false |
!= | 就是判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false |
> | 就是判断左边是否大于右边,如果成立就是true,如果不成立就是false |
>= | 就是判断左边是否大于等于右边,如果成立就是true,如果不成立就是false |
< | 就是判断左边是否小于右边,如果成立就是true,如果不成立就是false |
<= | 就是判断左边是否小于等于右边,如果成立就是true,如果不成立就是false |
注意点
- 关系运算符最终的结果一定是布尔类型,要么是true、要么是false
- 在写 == 的时候,千万不要写成 =
10. 逻辑运算符
& 和 | 的使用:
&:逻辑与(而且)
两边都为真,结果才是真,只要有一个为假,那么结果就是假的。
|:逻辑或(或则)
两边都为假,结果才是假,只要有一边为真,那么结果就是真的。
使用场景:
根据固定的场景,来选择使用& 或则 |
-
用户登录
用户名输入正确 & 密码输入正确
因为只有用户名和密码同时都正确了,那么才能成功登录,只要有一个失败了都不能登录
使用技巧:
当我们需要同时满足左边和右边两种情况时,可以使用且
! (取反)的使用:
是取反,也叫做非
计算规则:false取反就是true,true取反就是false
温馨提示:取反最多只用一个
11. 短路逻辑运算符
分类:&& ||
&&:
运算结果跟&是一模一样的,只不过具有短路效果;
||:
运算结果跟|是一模一样的,只不过具有短路的效果
逻辑核心:
当左边不能确定整个表达式的结果,右边才能执行(也就是有一边为真的情况下,另外一边就 不会参与运行)
当左边能确定整个表达式的结果,那么右边就不会执行了,从而提高了代码的运行效率
举例:
-
用户登录案例
用户名正确 & 密码正确
如果使用一个&,不管用户名是否正确都会去验证密码。
思考:
如果用户名输入正确了,那么我们再去判断密码是否正确,是符合逻辑的
但是如果用户名错误了,那么现在还有必要去比较密码吗?那就没有必要了
如果使用一个 & ,那么左边和右边不管什么情况下,都会执行
用户名正确 && 密码正确
如果用户名输入正确了,那么才会验证密码是否输入正确
如果用户名输入错误了,那么就不会再去验证密码是否正确,最终的结果直接为false,从而提高了程序运行的效率
总结:
&& 和 &、|| 和 | 的运行结果都是一模一样的
但是短路逻辑运算符可以提高程序的运行效率
12. 三元运算符
又叫做:三元表达式或则问号冒号表达式
格式:
关系表达式 ? 表达式1 :表达式2;
计算规则:
- 计算关系表达式的值
- 如果关系表达式的值为真,那么执行表达式1
- 如果关系表达式的值为假,那么执行表达式2
注意点:
三元运算符的最终结果一定要被使用,要么复制给一个变量,要么直接打印出来
13. 运算符的优先级
在Java中设计了很多的运算符,每一种运算符都有各自的优先级,但是这些优先级不需要记忆
只要知道其中一点:小括号优先于所有