3、说说&和&&的区别-Java面试题答案
共同点:&和&&都可以用作逻辑与(and)运算,当运算符两边都为true时结果才为true,否则为false.
不同点:&&运算符有短路的功能,即当运算符左边的值为false时,右边则不会进行运算,直接跳过.
A&&B
A已经是false,就不用判断B是true还是false了,这是短路
但若A是true,你就必须判断B是真是假了,这就不短路了
&运算符没有短路功能.但是是可以用作位运算.
package com.n3; public class Demo { public static void main(String[] args) { System.out.println("true&true="+(true&true)); System.out.println("true&false="+(true&false)); System.out.println("false&false="+(false&false)); System.out.println("----------"); System.out.println("true&&true="+(true&&true)); System.out.println("true&&false="+(true&&false)); System.out.println("false&&false="+(false&&false)); System.out.println("----------"); int i=0; System.out.println(false&++i==0); 输出结果: true&true=true true&false=false false&false=false ---------- true&&true=true true&&false=false false&&false=false ---------- false 1 false 1 ---------- false 0 false 1 ---------- 5&3=19
输出结果:
true&true=true true&false=false false&false=false ---------- true&&true=true true&&false=false false&&false=false ---------- false 1 false 1 ---------- false 0 false 1 ---------- 5&3=19
System.out.println(i);
i=0;
System.out.println(true&++i==0);
System.out.println(i);
System.out.println("----------");
i=0;
System.out.println(false&&++i==0);
System.out.println(i);
i=0;
System.out.println(true&&++i==0);
System.out.println(i);
System.out.println("----------");
System.out.println("5&3="+(5&3));
/*
* 5二进制 :0000 0000 0000 0000 0000 0000 0000 0101
* 3二进制 :0000 0000 0000 0000 0000 0000 0000 0011
* 5&3 :0000 0000 0000 0000 0000 0000 0000 0001
* 1:可理解成true
* 0:可理解成false
*/
}
}