- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
&&和&
&&
逻辑与是一个逻辑运算符:当两边表达式都是true的时候,结果才是true,否则为false;
如:if(true && true) 结果为true;if(false && true) 结果为false;
&&还拥有一个短路功能,就是第一个表达式为false时,就不再计算第二个表达式
如:if(false && 100/0==0) 结果为false,而不是抛出错误。
&
按位与是一个二进制位运算符:当两个表达式同位为1是才为1,否则为0
如:3 & 6;3的二进制是011,6的二进制是110;所以是011 & 110,结果就是010
|| 和 |
||
逻辑或也是一个逻辑运算符:当两边表达式有一边为true时,结果为true,只有两边表达式都为false时,结果才是false
如:if(false || true) 结果为true;if(false || false) 结果为false;
而且||与&&同样具有短路功能,当第一个表达式为true时,第二个表达式则不再计算
如:if(true && 100/0==0) 结果为true,结果也是不抛出错误。
|
按位或同样是一个二进制按位运算符:当两个表达式同样位置都是0时,结果才是0,否则是1;
如:3 | 6;二进制:011 | 110,结果为111
equals 和 ==
==
双等号是一个关系运算符:存在两种情况
1、两边表达式为基础数据类型时:比较的是两个基本数据类型的值是否相等
2、两边表达式为引用类型时:那么比较的是两个对象的引用,也就是两个对象是否为同一个对象,并不是比较的对象的内容;
equals
是Object类的一个比较方法;
// 源码
public boolean equals(Object obj) {
return (this == obj);
}
可以看出来Object类中的equals方法用的还是==
,也就是比较的两个对象的引用是否相等
所以在所有类中如果没有重写Object类中equals方法时,equals方法比较的是对象的内存地址;当重写了equals方法时,则执行的是重写的逻辑,一般重写equals方法的类的逻辑都是比较对象的内容。