操作符相关知识点
1.优先级
最开始的优先级在我们脑子里大概就是先乘除后加减
我们来看看在ava操作符的优先级是怎么样的:
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[] | 从左向右 |
2 | !、+、-、~、++、– | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | «、»、>>> | 从左向右 |
6 | <、<=、>、>= | 从左向右 |
7 | ==、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | =、+=、-=、*=、/=、&=、=、^=、~=、«=、»=、>>>= | 从右向左 |
2.算数操作符
- 加号(+)
- 减号(-)
- 除号(/)
- 乘号()
这四个都可以与赋值=组合使用 +=、 -=、 /=、=
这里需要注意的是,很多时候我们在使用字符串拼接的时候喜欢使用+=,当我们使用+=去拼接字符串的时候,我们有没有想过底层是如何实现的,什么情况可以使用,什么情况要避免使用它。
我们动手来看看它的底层实现
第一步我们先来看下这段代码
String str2 = "";
str2 += "str";
System.out.println(str2);
我这里就当大家都有java环境
先编译 javac StringDemo.java 生成StringDemo.class
再用javap -c StringDemo.class来看看这个文件
那在循环里面会怎样呢
String str = "";
for (int i = 0; i < 10; i++) {
str += i;
}
System.out.println(str);
一次循环一个StringBuilder对象,在循环拼接字符串的时候,建议使用一下方式
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
sb.append(i);
}
System.out.println(str);
这里就使用了一个StringBuilder对象,这里底层的代码我就不贴出来了,大家可以动手试试,多动手才是关键。
快捷运算 :-- ++
快捷运算符在前面 表示先运算再生成值
在后面的话 就是先生成值再运算
3.关系操作符
关系操作符生成的是boolean类型的结果,也就是关系表达式的成立与否
例如:(1 == 0) 、(2 >= 1)
4.逻辑操作符
- 与 && 两个都为真才结果为真
- 或 || 两个有一个为真就结果为真
- 非 ! 结果取反
根据参数的逻辑关系 生成一个boolean类型的结果
我们需要注意的是或||,当它进行多个逻辑关系关联的时候,按顺序执行判断,
当一个逻辑关系成立,后面的逻辑关系不再继续 ,称为“短路”
5.位操作符
按位操作符会对两个参数二进制对应位进行运算
- 与 & 相同为一 不同为零
- 或 | 两个中有一个为一 则为一 否则为零
- 非 ~ 与其它几个不同 非只针对一个操作数 进行取反操作
- 异或 ^ 两个中有一个为一 但不全为一 则为一 否则为零
这里有个点值得注意:
判断奇偶数的时候: (x & 1) == 0 效率高很多
等于0则说明x是偶数,1的最低位是1其它都为0,只有x的最低位是0,x&1才会等于0
6.位操作符
针对的也是二进制数
针对的也是二进制数
<< 左移操作符 按照符号右边的数值 对二进制数向左移动对应的位数 低位补零
>> 右移操作符 按照符号右边的数值 对二进制数向右移动对应的位数 右移有符号位 符号位为正 高位补零 符号位为负则高位补一
>>>无符号右移操作符 按照符号右边的数值 对二进制数向右移动对应的位数 不管正负 高位都是补零
如何取得int类型-1的二进制数
这里我们可以复习一波:
1、先取-1的原码:10000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110(除符号位按位取反)
3、得补码: 11111111 11111111 11111111 11111111
7.三元操作符
三元表达式的格式:[条件语句] ? [表达式1] : [表达式2];
条件语句是一个结果为boolean的逻辑表达式,当条件为真是则表达式1有效,否则表达式2有效,类似下面:
if(条件语句){
}else{
}
作者:sheepherder
出处:https://blog.csdn.net/weixin_45157630
版权所有,欢迎保留原文链接进行转载