java中&叫做按位与,&&叫做短路与

它们的区别是:



& 既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean

表达式

,当&两侧是int时,要先把 运算符

两侧的数转化为 二进制数

再进行运算,而短路与(&&)的两侧要求必须是 布尔表达式

。举例如下:



12&5 的值是多少?答:12转成二进制数是1100(前四位省略了),5转成二进制数是0101,则运算后的结果为0100即4 这是两侧为数值时;



若 int i = 2,j = 4;则(++i=2)&(j++=4)的结果为false,其过程是这样的:先判断++i=2是否成立,这里当然是不成立了(3 == 2),但是程序还会继续判断下一个表达式是否成立,j++=4 ,该表达式是成立的,但是&运算符要求运算符两侧的值都为真,结果才为真,所以(++i=2)&(j++=4)的结果为 false 注意 :&为真的条件是两侧表达式都为真,但是即使我们判断出左侧表达式的值为false,程序也还是要继续执行去判断右侧的表达式值的真假



若 int i = 2,j = 4;则(++i=2)&&(j++=4)的结果为false,其过程基本上和上面的是相同的,但是若左侧表达式的值为false时,程序则不会继续判断右侧表达式的真假了,短路与中,短路这个词大概也就是这个意思吧

&&和&都是表示与,区别是&&只要第一个条件不满足,后面条件就不再判断。而&要对所有的条件都进行判断。

看下面的程序

public class TestUnsignedByte  
{  
    public static void main(String[] args)  
    {  
        if ((23 == 23) && (100 / 0 == 0))  
            System.out.println("运算没有问题。");  
        else  
            System.out.println("没有报错");  
    }  
}

输出的是“没有报错”。而将&&改为&就会如下错误: co

Exception in thread "main" java.lang.ArithmeticException: / by zero  
    at demo.TestUnsignedByte.main(TestUnsignedByte.java:7)



原因是:&&时判断第一个条件为false,后面的100/0==0这个条件就没有进行判断。


        &时要对所有的条件进行判断,所以会对后面的条件进行判断,所以会报错。



java中 | 叫做按位或,|| 叫做短路或



   ||和|都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。


看下面的程序:

public class TestUnsignedByte  
{  
    public static void main(String[] args)  
    {  
        if ((23 == 23) || (100 / 0 == 0))  
            System.out.println("运算没有问题。");  
        else  
            System.out.println("没有报错");  
    }  
}



此时输出“运算没有问题”。若将||改为|则会报错。

原因是:||判断第一个条件为true,后面的条件就没有进行判断就执行了括号中的代码,而|要对所有的条件进行判断,
所以会报错。