关于在if()里面用& 和&& | 和 ||的区别

string a = null;
if(a!=null&a.Length>0) {}
if(a!=null&&a.Length>0) {}
if(a!=null | a.Length==0) {}
if(a!=null || a.Length==0) {}
貌似&&逻辑运算符是前面false 后面就执行
& 前面执行后面也要执行?
请高手分析一下 | 和 || 是什么样的?

是什么编程语言?C还是Verilog?
我暂且假定是C
这几个符号的区别在于作用对象。&是逻辑量按位取与,也就是两个逻辑量一位一位地进行“与”运算。两边操作数的第一位上都是1时,结果的第一位值为1。否则该位值为0,其他位同理。
比如
B00010010&B00100011,按位计算结果为B00000010,
&&则是两个布尔变量(就是只有真和假两种值的变量)的运算,只有两个布尔变量都为“真”时,这个式子的结果才是“1”或者“真”,比如if (a=0 && b=1)就是说只有当a=0且b=1时才符合条件。
同样 | 是逻辑变量的运算,取“或”,|| 则是布尔变量的运算,取“或”
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-29
&是位与操作,一定会执行; &&是逻辑与操作,如果&&的前面为false了,后面的就不会执行了。

|是位或操作、一定会执行; || 是逻辑或操作,如果||的前面为true了,||的后面就不会执行了。
第2个回答  2012-08-29
a&&b 如果a为true,编译器不知道整个表达式是true还是false所以,必须执行b确定
如果a为false,编译器知道整个结果是false,b就不执行了
a||b 同理,如果a为true ,编译器知道整个表达式是true,就不执行b了,
但是 如果a为false 编译器还要执行,判定最后的结果
& 与运算
| 或运算
这两个 你只要记住 1&1=1 1&0=0 0&0=0 1 | 1=1 1|0=1 0 |0=0 就可以了
第3个回答  2012-08-29
...你反了一个严重的错误~~~~~~&和|的值不是blooean的~~~~~~~~而是一个int .....
if()里只接受blooean型的结果 所以
if(a!=null&a.Length>0) {}

if(a!=null | a.Length==0) {}

这些都不能通过编译(如果是C语言的话可以通过编译......因为c语言了if括号的值可以是数组1为真0为假)..
其实你上边的例子我没有测试 不过可能会通过编译 因为有运算符的优先级不过如果这么写的话
if((a!=null )| (a.Length==0)) {}是肯定通不过编译的追问

简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。
区别主要答两点:
a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型
b.逻辑操作不会产生短路

这个怎么解释?

追答

.好吧 你赢了 我错了
public class ttttz {
/**
* @param args
*/
static boolean s (int[] sx)
{
sx[0]=10;
return true;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int x[] = new int[1];
x[0]=1;
if((x[0]==5)&&ttttz.s(x))
{
/*这里使用了&& 必须&&的前后的值都是真结果才为真 如果第一个结果为假的话 后边的
ttttz.s(x) 就不会被执行这个时候x的值还是1 */
}
System.out.print(x[0]);

if((x[0]==5)&ttttz.s(x))
{
/*用&的话 后边de ttttz.s(x)也会被执行 这就是你上边说的 b逻辑操作不会产生短路
|和||也是同理 ||的话如果左边的返回值是真的话那右边的表达式就不会被执行了 用|的不管左边的值是什么右边的表达式都会被执行
*/

}
System.out.print(x[0]);

}
}

这个例子虽然有点傻但是完全却能说明你说的东西

本回答被提问者和网友采纳
第4个回答  2012-08-29
&&是“和”、“且”的意思(and)
||是“或”的意思(or)
&、| 是位运算,&位和,|位与
相似回答