运算符 | 和 ||,& 和 &&到底区别在哪里
2020-04-06 本文已影响0人
叫子非鱼啊
如何区分运算符 | 和 ||,& 和 &&?
我们只要记住一下两点就好了。
- 知道 | 和 & 定义为位运算符,|| 和 && 定义为逻辑运算符。
- 知道不管单个|和&运算,后边的判断一定会执行。双个运算符则前边满足条件后边才会执行。
什么是与运算和或运算?
- & 按位与操作,按二进制位进行"与"运算。运算规则:(有 0 则为 0)
- | 按位或运算符,按二进制位进行"或"运算。运算规则:(有 1 则为 1)
实践的真知
上面已经说了,运算符的作用和在程序中的执行顺序。
先来看一下 | 和 || 的运算情况
你觉得下面的这段代码会输出怎样的内容呢?
public static void main(String[] args) {
int i = 1;
int j = 1;
// ||运算执行判断
if (i == 1 || ++j == 1) {
System.out.println("第一个成立进行||运算后 ---- 执行方法");
}
System.out.println("||运算后 j = "+j);
// |运算执行结果
if (i == 1 | ++j == 1) {
System.out.println("第一个成立进行|运算后 ---- 执行方法");
}
System.out.println("|运算后 j = "+j);
}
- 先自己思考一下if中的语句都会执行吗?
- 最后输出的j值会是多少?
当然这都在第一个条件成立的情况下判断第二个语句是否会执行。(如果第一个条件不成立,两个会是相同的结果,没有区别)
image.png由此可见,||运算在第一个条件成立时,直接执行if中的语句,是不会执行第二条语句的。|运算则是,不管第一个是否成功,都会去执行第二个语句,所以导致j+1=2
同理,对上面的代码进行修改。使用&和&&进行判断会是什么结果。
public static void main(String[] args) {
int i = 1;
int j = 1;
// &&运算执行判断
if (i != 1 && ++j == 1) {
System.out.println("第一个不成立进行&&运算后 ---- 执行方法");
}
System.out.println("&&运算后 j = "+j);
// &运算执行结果
if (i != 1 & ++j == 1) {
System.out.println("第一个不成立进行&运算后 ---- 执行方法");
}
System.out.println("&运算后 j = "+j);
}
- if中的语句会执行吗?
- 最后输出的j值会是多少?
运行结果如图所示
image.png由于第一个条件已经不满足了,所以if中的语句是不会执行的。但使用&运算时,程序仍然会判断第二个条件,所以j+1。
总结
既然已经知道了程序中执行的区别,那如何该避免他们出现错误呢?
- 尽量使用逻辑与、或运算。即(&& 、||)
- 尽可能的减少在判断中进行其他非判断的运算
程序的世界中很单纯,你给它什么样的指令,它就怎么的去执行,严格执行但不会考虑对错。
想看电影关注我的公众号:电影资源集(支持输入电影名称自动回复了)
喜欢就点个👍吧