Java中逻辑&和短路&&,逻辑|和短路||的区别

Java中逻辑&和短路&&的区别是:逻辑&需要判断&符号左边和右边的两个条件,而短路&&,如果&&符号左边的是真,才会判断右边;如果&&符号左边为假,则走else。

eg.

public class Demo {
    public static void main (String [] args) {
        int a = 4;
        int b = 3;
        int c = 0;

                if(a<b & b/c == 0) { // 报错
            System.out.println("nihaoma");
        }else {
            System.out.println("wohenhao");
        }

                if(a>b & b/c == 0) { // 报错
            System.out.println("nihaoma");
        }else {
            System.out.println("wohenhao");
        }

                if(a>b && b/c == 0) { // 报错
            System.out.println("nihaoma");
        }else {
            System.out.println("wohenhao");
        }

        if(a<b && b/c == 0) {
            System.out.println("nihaoma");
        }else {
            System.out.println("wohenhao");    // 输出“wohenhao”
        }
    }
}            

上述代码中,因为第一,第二段输出里面,因为是逻辑&,所以&符号左边和右边的条件都要判断,其中有一个是假,就不成立。而其中b/c,因为除数是0,,所以输出时报错。第三、第四段输出,因为是短路&&,所以只要&&号左边的为假,就会走else,&&符号左边的为真,就会判断第二个条件。所以第三段输出报错,第四段输出else中的打印结果。

eg.

public class Demo {
    public static void main (String [] args) {
        int a = 4;
        int b = 3;
        int c = 0;

                if(a<b & b/c == 0) { // 报错
            System.out.println("nihaoma");
        }else {
            System.out.println("wohenhao");
        }

                if(a>b | b/c == 0) { // 报错
            System.out.println("nihaoma");
        }else {
            System.out.println("wohenhao");
        }

                if(a>b || b/c == 0) {
            System.out.println("nihaoma"); // 输出"nihaoma"
        }else {
            System.out.println("wohenhao");
        }

        if(a<b || b/c == 0) {//  报错
            System.out.println("nihaoma");
        }else {
            System.out.println("wohenhao");
        }
    }
}  

上述代码中,第一第二个输出,因为是逻辑|,所以两边都要判断,有一个报错,即报错。第三第四个输出中,因为是短路||,所以第三段中,第一个条件为真,就不会继续判断第二个条件;第四段中,因为第一个为假,需要判断把第二个,因为第二个报错,所以结果报错。

原文地址:https://www.cnblogs.com/xiaoya625/p/9271357.html

时间: 2024-08-01 18:52:28

Java中逻辑&和短路&&,逻辑|和短路||的区别的相关文章

关于Java中this和super的用法介绍和区别

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可

java中,return和return null有什么区别吗?

java中,return和return null有什么区别吗? 最大的区别:return;方法的返回值必须是void!return null;方法的返回值必须不是 原始数据类型(封装类除过)和void! return 就是跳出方法...return null也是跳出方法并返回null.. 也就是说return null必须用在返回值不是void的方法里面..return可以用在任何方法里面 不要认为null就是没有值..null就是值..真正的没有值是..比如你String s;这个时候s是没有

Java中集合List,Map和Set的区别

Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Key不能重复 4.Set中的元素是无序的,不可重复的

Java中PhantomReference、WeakReference、SoftReference有什么区别?

Java中有多种引用类型,按照从强到弱的顺序分别如下: 强引用:就是最常见的引用,通过等号赋值就是强引用. 软引用:当内存不足时自动释放引用.一般应用于需要大量内存的缓存程序中. 弱引用:不阻止垃圾回收,当强引用或者软引用都消失时,即使存在弱引用内存也会被释放. 幽灵引用:只引用一个对象的"灵魂",幽灵引用是不能直接访问的,所以get方法永远返回null.这种引用能阻止JVM释放对象的内存,但是被引用的对象可以finalize.这东西有什么用呢?按照文档中的说法就是用于调整对象之间fi

深刻理解Java中的String、StringBuffer和StringBuilder的区别

首先简单地来梳理一下Java中String.StringBuffer和StringBuilder各自的含义. 1.String类 首先,它是线程安全的,即可以用于多线程编程中: 其次,String类的对象是不可变的,即在定义时就确定了,类似String str="Hello";str+="Java";的语句其实是生成了新的对象,只是我们未察觉到而已.但是注意在大量的字符串新建对象时消耗就很可观,这时必须考虑采用StringBuffer或StringBuilder,否

java中static、final、static final的区别

final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值. final修饰的属性表明是一个常数(创建后不能被修改). final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继承. 对于基本类型数据,final会将值变为一个常数(创建后不能被修改):但是对于对象句柄(亦可称作引用或者指针),fin

Java中关键字continue、break和return的区别

Java中关键字continue.break和return的区别: continue:跳出本次循环继续下一次循环 break:   跳出循环体,继续执行循环外的函数体 return:   跳出整个函数体,函数体后面的部分不再执行 有代码才有真相: [java] view plain copy <span style="font-family:SimSun;font-size:14px;"><span style="font-family:SimSun;fon

java中4种修饰符访问权限的区别及详解全过程

java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为public.protect.default.private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高. 下面详细讲述下它们的访问权限问题.(同一个类中除内部类外所有修饰符都是可以访问的,所以下面排除这种情况.) 首先在这里把它们的访问权限表示出来:

Java中的“==操作符”和equals方法有什么区别

Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符. 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如: Objet obj = new Object(); 变量obj是一个内存,new Object()是另一

Java中微服务架构与传统架构的区别

Java中微服务架构与传统架构的区别 在聊微服务之前,先来看看传统架构的优缺点. 传统的 MVC 架构,所有的子系统都集成在一个很繁杂的 JVM 进程中. 优点: 这种单体架构的优点在于方便管理,所有代码在同一项目中,但是当需求越来越多,项目规模越来越大,其坏处也很明显. 缺点: 1.项目过于臃肿,部署效率低下 当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护.单体应用的代码越来越多,依赖的资源越来越多时,应用编译打包.部署测试一次非常耗时.系统高可用性差,资