Java面试题之&与&&的区别?

Java中的&与&&代表的是完全不同的两个概念,一个是逻辑运算,一个是条件运算,同时两者又都属于条件运算。

一、先看结论:

  1. 首先看运算符两边的数据类型:&&左右只能是布尔类型数据,&两边可以是布尔类型也可以是数值类型;
  2. 再来看运算符的运算规则:&&会出现短路现象,即左边表达式值为false时,整个表达式最后结果必为false,所以右边的表达式就不需要判断是true还是false了,&必须把左右表达式结果都运算出来,再根据与运算的规则确定表达式结果;
  3. 最后在看两者的具体运算方法:&&比较简单,直接就是真真为真,其余为假;&是要按位运算再确定表达式结果的,详细过程看下方解析。

二、&逻辑运算

先看按位运算定义:

程序中的所有数在计算机内存中都是以二进制的形式存储的,位运算就是直接对两个数的二进制表示形式进行比较运算;

说白了就是,把整数在内存中的二进制数据拿出来进行比较,比较的时候要上下对齐比较,得出的结果也是二进制数据,再转换成十进制数据显示,就是按位运算的最终结果。

举个例子:

6&11

  • 第一步:十进制6的二进制表现形式是110;
  • 第二步:十进制11的二进制表现形式是1011;
  • 第三步:6&11就可以写成:110 and 1011;

为了直白显示出两个数据的前后比较,可以这样写:

110

1011

但此时很明显的是,一个三位数据,一个是四位数据,位数不对应的,要按照自右向左的原则排序,不足的数位用0代替;那此时就应该写成:

0110

1011

按位与运算的运算规则是:1代表true,0代表false;

因为与运算的规则就是两个数据同时为真,结果才为真;

那么6&11的运算结果为

0010

  • 第四步:把0010 换算成十进制,就是最终结果2; 

三、&&条件运算符

逻辑运算符就是逻辑上的运算,即运算符左右两个数据必须是Boolean类型的

&&也是与运算,同样遵守与运算的运算规则:两个数据同时为真,结果才为true;

举个例子:

boolean a = false;
Boolean b - true;

if(a&&b){
//输出  结果为真
}else{
//输出  结果为假
}

 那么此时程序就会走else不走if结构体,输出内容就是:结果为假;

因为逻辑运算符比较的就是左右两个数据的Boolean值,不需要进制之间的转换等操作。

四、总结

一个&是位运算,两个&&是逻辑运算;

一个要进制转换,两个不用太多操作;

一个要按位逻辑,两个直接前后逻辑。

可以这样记忆:位运算只有一个运算符,所以还有另一只手去做别的事,就需要进制转换再逻辑运算;逻辑运算两个运算符,左右手各拿一个,没有空余的手去做其他的事,就直接逻辑运算。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值