1、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时,程序则不会继续判断右侧表达式的真假了,短路与中,短路这个词大概也就是这个意思吧

2、Java中‘|’与‘||’的区别

int
i=0;
if(3>2 || (i++)>1) i=i+1;
System.out.println(i);

这段程序会打印出1,而不是打印出2。
因为在if的条件判断中,程序先判断第一个表达式3>2是否成立,结果3>2为真,那么按照逻辑来说,无论后面一个表达式(i++)>1是否成立,整个或表达式肯定为真,因此程序就不去执行判断后面一个表达式即(i++)>1了,所以这里i并没有自增1。然后程序执行到i=i+1,于是i变为1。最后打印出1。

int i=0;
if(3>2 | (i++)>1) i=i+1;
System.out.println(i);

如果换做这样写,那么就是打印出2了,因为无论第一个条件3>2是否为真,程序都会去执行判断第二个条件表达式,因此i++这个自增是会被执行的,再加上if内的i=i+1,所以最终i=2。

有些人习惯把||叫做短路或,把&&叫做短路与。&&和&的区别和||与|的区别类似,对于&&来说,如果前面的条件表达式已经为假了,整个条件表达式肯定为假,就不会去执行判断后面的条件表达式。

Java中&、|、&&、||详解的更多相关文章

  1. java中+=详解 a+=b和a=a+b的区别

    short a=10; a+=4; System.out.println(a); 1.第一段代码的输出结果为14.执行流程是首先声明变量,判断赋给变量的初始值是否在short类型范围内,如果在则进行强 ...

  2. java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")

    http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...

  3. Java List详解,面试中应该如何解答关于List的问题

    对于面试,我们在介绍Java的List的时候,一般需要介绍到,什么是List?List包括什么?各自在用法上有什么区别,在存储上有什么区别?List需要注意什么?把这些问题串起来,我们可以这样介绍: ...

  4. Java集合详解6:这次,从头到尾带你解读Java中的红黑树

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  5. Java内部类详解

    Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...

  6. 黑马----JAVA迭代器详解

    JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...

  7. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  8. Java虚拟机详解----JVM常见问题总结

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. [转] Java内部类详解

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  10. Java面向对象详解

    Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...

随机推荐

  1. 针对IE及其它的css hack

    现在一些针对针对政府的oa项目还要去解决兼容IE6 7 8,这对前端开发来说简直是灾难,在要使用一些css3,或者H5的地方,我们就要慎重了,在使用新特性的同时要兼顾老的浏览器的,做到优雅降级,或者针 ...

  2. Vue核心技术 Vue+Vue-Router+Vuex+SSR实战精讲

    第1章 课程介绍课程介绍,介绍课程的章节安排和学习本门课程的一些注意点.1-1 课程导学 试看1-2 项目介绍1-3 Webpack4升级注意 第2章 Vue+Webpack的前端工程工作流搭建详细讲 ...

  3. [转]SVN服务器搭建和使用(一)

    Location是指VisualSVN Server的安装目录,Repositorys是指定你的版本库目录.Server Port指定一个端口,Use secure connection勾山表示使用安 ...

  4. 用C++编写发布器和订阅器节点

    1.转移到之前教程在catkin工作空间所创建的package路径下: $ roscd package_name/ 例子:$ roscd practice/2.在package路径下创建src目录: ...

  5. webpack超详细配置, 使用教程(图文)

    流程 webpack安装 Step 1: 首先安装Node.js, 可以去Node.js官网下载. Step2: 在Git或者cmd中输入下面这段代码, 通过全局先将webpack指令安装进电脑中np ...

  6. apue2e unp安装

    最近在读 Richard Stevens 的大作<UNIX环境高级编程>,相信很多初读此书的人都会与我一样遇到这个问题,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个 ...

  7. 课下测试ch01修改补交

    由于当时学习态度有问题,没有注意到第一次的课下测试,虽然在当周的总结中就进行补交,但是当时态度并没有很认真,可能没有引起老师的注意,现在重新修改,望老师谅解. (单选题 | 1 分) Amdahl定律 ...

  8. 【python3】爬取简书评论生成词云

    一.起因: 昨天在简书上看到这么一篇文章<中国的父母,大都有毛病>,看完之后个人是比较认同作者的观点. 不过,翻了下评论,发现评论区争议颇大,基本两极化.好奇,想看看整体的评论是个什么样, ...

  9. 洛谷 1440 求m区间内的最小值

    洛谷  1440 求m区间内的最小值 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. ...

  10. pycharm字体放大缩小设置

    放大设置 File —> settings—> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) —> 在弹出的对话 ...