A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我能驾驭住 中级黑马   /  2012-6-3 22:42  /  1985 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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了,第一个为假,还运算了第二个?第二个为真,所以执行了。。
不是短路吗?

7 个回复

倒序浏览
本帖最后由 黑马张扬 于 2012-6-3 22:55 编辑

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

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

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
逻辑运算符

      &                      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

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
短路与&&  短路或|| 不一样
&&是左边为false了,右边就不操作了。
||是左边为true了,右边就不操作了。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
&与&&的特点:
逻辑与&     无论左边是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,右边就不再参与运算
以上是两种情况是反的,所以需要注意下

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
&&只要判断到有一个是假的后边的就不会再判断
|| 会一直判断到一个真的 后边的也不会再判断
回复 使用道具 举报
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参与运算;
对于这个概念并不是说必须第二个不参与运算就叫短路;而是对于这两个&& ||符号来说是"短路"运算符;

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
问题是否已得到解决了??????
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马