Java小知识(二)、&&和&、||和|、equals和==的区别

191 阅读2分钟

&&和&

&&

逻辑与是一个逻辑运算符:当两边表达式都是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方法的类的逻辑都是比较对象的内容。