小博老师解析经典Java面试题-&与&&运算符

[面试原题]面试

Java中&与&&运算符的区别。this

[正确答案]指针

      &&是逻辑与运算符,运算的两个数据都是true时,结果为true,有一个数据是false,结果就是false。有短路效果。code

&是与位运算符,运算的两个数据以二进制方式相同位与运算,两个都是1结果为1,有一个是0结果就是0。对象

&也能够用来处理逻辑与运算,运算结果和&&运算符相同。区别在于&运算不会形成短路效果。get

[面试技术点]io

Java逻辑运算符的短路效果。class

[步骤解读一]效率

逻辑运算符&&和||的常规使用相信你们都没有疑问,这里小博老师就不浪费篇幅啦,如下图为结论。全栈

这里重点为你们讲解一下逻辑运算符的短路效果。&&和||逻辑运算符,都是存在短路效果的。短路效果指的是,当运算符左边的值,对整个表达式起决定性因素时,运算符右边的表达式就不会(不必)运行了。咱们以&&运算符为例。

// 博为峰 BWF 全栈Java课程

// JavaSE课程模块

// 运算符章节 -> 逻辑运算符短路效果

int a = 3,b=5;

boolean c = a++ > 10 && b++ > 10;

System.out.println( "a = "+a+" , b = "+b+" , c = "+c );

运行结果是:a = 4 , b = 5 , c = false

a的值是4,由于运行了a++,你们应该没有问题。c的值是false,由于a++>10的值是false,b++>10的值也是false,你们应该也没有问题。那么关键就是b的值,为何仍是5?这是由于a++>10的值是false,&&逻辑运算符的两个运算值,只要有一个是false,结果就是false,所以&&运算符右边的b++>10表达式运算的结果是true仍是false,已经没有任何意义了,对整个表达式的结果不起任何做用,所以&&运算符触发短路效果,直接不运行右边的表达式了。

[步骤解读二]

逻辑运算符的短路效果,其做用不光是为了提升程序的执行效率,过滤掉无用的表达式,其实在实际工做中有很重要的运用。好比,咱们要判断某个学生对象是否年满18岁。

// 博为峰 BWF 全栈Java课程

// JavaSE课程模块

// 运算符章节 -> 逻辑运算符短路效果

class Student{

      private String name;

      private int age;

      public Student(String name,int age){

            this.name = name;

            this.age = age;

      }

}

Student s = null;

if( s.age >= 18 ){

      System.out.println(s.name+"成年啦!");

}

运行结果:NullPointerException空指针异常,由于学生对象s是null。

若是咱们的要求是,当学生存在而且年满18岁时,输出该学生成年。当学生不存在或则年龄不满18岁时,不输出。咱们能够改变一下判断的条件。、

原判断条件:if( s.age >= 18 )

现判断条件:if( s != null && s.age >= 18 )

这样改写判断条件后,不管学生对象是否存在,都不会再出现空指针异常。这是由于,若是学生对象是null时,s!=null的值为false,&&运算符触发了短路效果,s.age>=18表达式就不会运行了,也就不会访问到空指针对象s中的成员(age)了。

[步骤解读三]

&运算符的位运算做用,相信你们并不陌生,也不是本篇的重点,小博老师这里就不浪费篇幅了。这里主要给你们演示&运算符的逻辑运算时,和&&运算符的区别。一样的案例以下:

// 博为峰 BWF 全栈Java课程

// JavaSE课程模块

// 运算符章节 -> 逻辑运算符短路效果

int a = 3,b=5;

boolean c = a++ > 10 & b++ > 10;

System.out.println( "a = "+a+" , b = "+b+" , c = "+c );

运算结果:a = 4 , b = 6 , c = false

因而可知,&&运算符和&运算符的逻辑运算结果相同,区别在于&&运算符有短路效果,而&运算符是没有短路效果的,不管运算符左边的值是什么,运算符右边的表达式都要运行。

相关文章
相关标签/搜索