黑马程序员技术交流社区

标题: 这样的短路是短路吗?&& 和||.... [打印本页]

作者: 我能驾驭住    时间: 2012-6-3 22:42
标题: 这样的短路是短路吗?&& 和||....
public class TestAnd
{
   public static void main(String[] args)
   {
       int x=0;
       int y=3;
       if(x!=0 && y==y/x)
              System.out.println("y = "+y);
   }
}
结果不运行,第一个是假,后面就不运行了。。。。
public static void main(String[] args) {
int x = 0;
int y = 3;
if (x > 6 || y > 1 ){
System.out.println("hello");
}
结果是打印hello了,第一个为假,还运算了第二个?第二个为真,所以执行了。。
不是短路吗?
作者: 黑马张扬    时间: 2012-6-3 22:46
本帖最后由 黑马张扬 于 2012-6-3 22:55 编辑

&&:逻辑与 第一个条件为假  直接结果为假 不判断第二个条件
|| : 逻辑或  第一个条件为真 直接结果为真 不判断第二个条件

你那第二个用的是逻辑或 第一个条件是假得不出结果  所以还要判断第二个条件 第二个条件为真 结果就为真了 然后打印了


作者: 唐辉辉    时间: 2012-6-3 22:49
逻辑运算符

      &                      AND(与)                 false & true                 false

         |                        OR(或)                   false | true                  true

        ^                       XOR(异或)              true^ false                  true

         !                        NOT(非)                 !true                         false

         &&                   AND(短路)              false&&true               false

          | |                     OR(短路)                 false||true                    true

&和&&的区别

单&时,左边无论真假,右边都进行运算;

双&时,如果左边为真,右边参与运算,如果左边为假,右边则不参与运算。

| 和 | | 的区别同理

异或(^)与或( | )的不同之处在于:当左右都为ture时,结果为false

作者: 朝哥    时间: 2012-6-3 22:55
短路与&&  短路或|| 不一样
&&是左边为false了,右边就不操作了。
||是左边为true了,右边就不操作了。
作者: 金鑫    时间: 2012-6-3 22:56
&与&&的特点:
逻辑与&     无论左边是true还是false,右边都参与运算
短路与&&   如果左边是false,右边就不运算

public static void main(String[] args)
   {
       int x=0;
       int y=3;
       if(x!=0 && y==y/x)
              System.out.println("y = "+y);
   }
所以该输出语句不运行,因为左边x!=0是false,if语句根本进不来,右边同时也不运算

逻辑或|     表达式两边都参与运算
短路或||    当左边为true,右边就不再参与运算
int x = 0;
int y = 3;
if (x > 6 || y > 1 ){
System.out.println("hello");
}
因为x > 6是false,所以右边 y > 1还会继续运行,if语句进来,所以最后输出了hello.


最后总结一点:
短路与&&   如果左边是false,右边就不运算
短路或||    当左边为true,右边就不再参与运算
以上是两种情况是反的,所以需要注意下

作者: 张頔    时间: 2012-6-3 22:58
&&只要判断到有一个是假的后边的就不会再判断
|| 会一直判断到一个真的 后边的也不会再判断
作者: 胡团乐    时间: 2012-6-3 22:58
public static void main(String[] args) {
int x = 0;
int y = 3;
if (x > 6 || y > 1 ){
System.out.println("hello");
} 这个属于短路 false || true 为true

X&&Y 当X为假时,Y不参与运算; X为真时Y参与运算
X||Y 当X为真时,Y不参与运算;X为假时Y参与运算;
对于这个概念并不是说必须第二个不参与运算就叫短路;而是对于这两个&& ||符号来说是"短路"运算符;
作者: 袁錦泰    时间: 2012-6-3 23:19
问题是否已得到解决了??????




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2