我想很多人在学习java的时候,或者其他语言(如:C#,.Net等)都会遇到

&和&&

然而,如果你没有真正的理解他们的意思,这会给你思路上面带来很大的麻烦

在这篇blog中,当你看完了以后,你会发现,很容易就把他们给区分开了

下面是我的demo

 1 /**
2 *
3 */
4 package com.b510.test;
5
6 /**
7 * @author Jone Hongten
8 * @create date:2013-11-2
9 * @version 1.0
10 */
11 public class Test {
12
13 public static void main(String[] args) {
14 String str = null;
15 if(str != null && !"".equals(str)){
16 //do something
17 }
18 if(str != null & !"".equals(str)){
19 //do something
20 }
21 }
22 }

我们现在可能有一些模糊不清,现在我们先看看&和&&的电路问题:

对于:&&

if(str != null && !"".equals(str))

当: str != null 的时候,接下来才会去执行: !"".equals(str)

如果: str != null为false,那么这个时候,程序是处于短路的情况,则,!"".equals(str) 是不会执行的。

但是对于:&

if(str != null & !"".equals(str))

不管: str != null 的结果如何(即true,false),程序都会执行: !"".equal(str)

电路问题总结:

对于:&   -- >  不管怎样,都会执行"&"符号左右两边的程序

对于:&& -- >  只有当符号"&&"左边程序为真(true)后,才会执行符号"&&"右边的程序。

下面来说说运算规则:

对于:&  -- >  只要左右两边有一个为false,则为false;只有全部都为true的时候,结果为true

对于:&& -- > 只要符号左边为false,则结果为false;当左右都为true时,则结果为true

| 和 ||  其实是和上面的意思是一样的

|  -- >  只要左右两边有一个为false,则为false;只有全部都为true的时候,结果为true

||-- > 只要符号左边为false,则结果为false;当左右都为true时,则结果为true

java中&和&& | 和||的区别的更多相关文章

  1. java中ArrayList 、LinkList区别

    转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.L ...

  2. java 中 ==和equals 的区别

      Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolea ...

  3. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  4. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

  5. java中a++与++a区别

    java中a++与++a区别 a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!! 先看a++的代码哦 class demo1 { ...

  6. c#与java中byte字节的区别及转换方法

    原文:c#与java中byte字节的区别及转换方法 在java中  byte的范围在 [-128,127] 在C#中  byte的范围在 [0,255] 所以 java程序与C#程序 进行数据传输的时 ...

  7. java中==与equel的区别

    值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地 ...

  8. Java中的“&”和“&&”的区别

    Java中的"&"和"&&"的区别 1."&"是位运算符,"&&"是逻辑 ...

  9. java中PriorityBlockingQueue 和DelayedWorkQueue 区别

    java中PriorityBlockingQueue 和DelayedWorkQueue 区别

  10. Java-杂项: Java中Array和ArrayList区别

    ylbtech-Java-杂项: Java中Array和ArrayList区别 1.返回顶部 1. 1)精辟阐述:可以将 ArrayList想象成一种“会自动扩增容量的Array”. 2)Array( ...

随机推荐

  1. javaScript(1)---概述

    javaScript(1)---概述 学习要点: 1.什么是JavaScript 2.JavaScript特点 3.JavaScript历史 4.JavaScript核心 JavaScript诞生于1 ...

  2. flask开发过程中的常见问题

    1. 使用supervisorctl时报"http://localhost:9001 refused connection"错误 解决方法:使用supervisorctl时指定配置 ...

  3. 关于Resin SSL支持的两个问题

    1.Resin的OpenSLL支持功能只有收费Pro版才支持,这一点,只有你做好配置,测试的时候才会在提示中发现,文档里没有说明. 2.它的官方文档这部分有问题,第一个问题就是上面第一条没有说,第二个 ...

  4. 兼容 Android 4.4 透明状态栏与导航栏

    http://www.apkbus.com/Android-163388-1-1.html?_dsign=73d41229 android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加 ...

  5. Floyd 算法求多源最短路径

    Floyd算法: Floyd算法用来找出每对顶点之间的最短距离,它对图的要求是,既可以是无向图也可以是有向图,边权可以为负,但是不能存在负环(可根据最小环的正负来判定). 基本算法: Floyd算法基 ...

  6. Ext Js Sencha Cmd 命令 打包charts

    先进入charts包的目录下 cd D:\开发文档API\ext--gpl\packages\charts 在执行打包命令 sencha package build

  7. ArcCore重构-头文件引用问题的初步解决

    基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5   基本问题 1. 头文件引用混乱,所有头文件通过从搜索路径(-I)中引用,存在名称污染问题,需加入路径信息:   ...

  8. 【热身】github的使用

    GitHub 可以托管各种Git版本库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性.为一个 ...

  9. 关于mysql中的DDL,DML,DQL和DCL

    SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...

  10. robot framework之弹出窗口的处理关键字实战

    1.1  弹出窗口的处理关键字 5.8.1 Alert Should Be Present关键字 按F5 查看Alert Should Be Present关键字的说明,如下图