其实没必要说那么复杂啊,只要知道其区别就可以了比如&与&&java中的&相当C语言的&&,就是在运算的时候 比如int x = 3; int y = 4; int z = 5; if(x>y&y<z) { ....... } 当x>y不成立时,上例还需要继续判断y<z是否成立,也就是非短路版本 而当把&换成&&后,当左边为false时,则不需要再计算右边是否为true,这个时“短路与”同理 | 都需要计算左右两边的值,而 || 只要左边表达式为true时,则不需要计算右边的表达式两者只存在效率区别,在应用方面应该是都可以的
&&是逻辑与
|是位或
||是逻辑或int i = 3;
int j = 5;
i 在内存中为 前面的0 0011
j 在内存中为 前面的0 0101
&的结果为 前面的0 0001 //这个位上必须都是1才是1
|的结果为 前面的0 0111 //这个位上有一个是1就是1
|:布尔逻辑或布尔逻辑与(&)、布尔逻辑或(|)与逻辑与(&&)、逻辑或(||)的区别是前者为非短路运算符,后者为短路运算符。具体的区别可以看看:http://topic.csdn.net/u/20080130/17/7fdd8b93-bdd6-467a-863e-fc3c9731bc52.html第一个问题和 20、54、72 楼的回复。
&& || 要求前后都是boolean
学到东西了,我还一直认为boolean可以既用&(|)也用&&(||)
int y = 4;
int z = 5;
if(x>y&y<z)
{
.......
}
当x>y不成立时,上例还需要继续判断y<z是否成立,也就是非短路版本
而当把&换成&&后,当左边为false时,则不需要再计算右边是否为true,这个时“短路与”同理 | 都需要计算左右两边的值,而 || 只要左边表达式为true时,则不需要计算右边的表达式两者只存在效率区别,在应用方面应该是都可以的