查看: 4350|回复: 7

java短路逻辑问题,求大神解答。

[复制链接]
发表于 2016-1-24 15:33:02 | 显示全部楼层 |阅读模式
public class ShortCircuit{
    //执行test1()时打印出执行信息
    static boolean test1(int val){
        System.out.println("test1("+val+")");
        System.out.println("result: " + (val<6));
        return val<6;
    }
    //执行test2()时打印出执行信息
    static boolean test2(int val){
        System.out.println("test2("+val+")");
        System.out.println("result: " + (val<4));
        return val<4;
    }
    //执行test3()时打印出执行信息
    static boolean test3(int val){
        System.out.println("test3("+val+")");
        System.out.println("result: " + (val<2));
        return val<2;
    }
    public static void main(String[] strs){
        boolean b = test1(val)&&test2(val)&&test3(val);
        System.out.println("expression is: " + b);
    }
}


大神可以解释下 加粗和红色字体的部分吗?

就是怎么判断 test1(val)&&test2(val)&&test3(val) 它们的值,有点搞不懂?

比如:
int x=3;
int y=4;

(x!=0)&&y  是false  因为有数字值相比。

像上面提问的例子,没有值可比,求大神解答。
           
回复

使用道具 举报

发表于 2016-1-24 15:42:04 | 显示全部楼层
首先建议你copy东西copy的完整点,我并没有看到加粗和红色在哪里?
第二点,你这个问题貌似满大街都有把?
http://blog.csdn.net/xuefu_78/article/details/50412698
http://wenku.baidu.com/link?url= ... gcXBUH6Ao-grhWY_NlW


自己去看
回复 支持 反对

使用道具 举报

发表于 2016-1-24 16:21:47 | 显示全部楼层
本帖最后由 xiaoye 于 2016-1-24 16:28 编辑

分析:
3.png
实例:
4.png


                                这些在java中也是有介绍到的,比C语言,C++资料中的介绍更加明了,人丑多读书!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-24 16:21:59 | 显示全部楼层
早就看了 不过 我就是不明白 就是粗字体的地方的值怎么比?

点评

去看逻辑关系,逻辑与的运算。  详情 回复 发表于 2016-1-24 16:26
回复 支持 反对

使用道具 举报

发表于 2016-1-24 16:26:46 | 显示全部楼层
柳叔 发表于 2016-1-24 16:21
早就看了 不过 我就是不明白 就是粗字体的地方的值怎么比?

去看逻辑关系,逻辑与的运算。
回复 支持 反对

使用道具 举报

发表于 2016-1-24 16:34:03 | 显示全部楼层
不是用值去比的。
回复 支持 反对

使用道具 举报

发表于 2016-2-24 10:34:47 | 显示全部楼层
加粗字体的地方,是由test(val)中所传入的val值与6、4、2等拿来比较。val<6中的val就是你test(val)中所填写的val,是数值
回复 支持 反对

使用道具 举报

发表于 2016-3-6 15:55:12 | 显示全部楼层
1.在方法调用的时候没有给形参val传值。boolean b = test1(val)&&test2(val)&&test3(val);   val--没有赋值。
2.“短路与”和“逻辑与”的区别在于是否计算后面的布尔类型表达式。
比如你举得例子:
int x = 3,y = 4; (x!=0)&&y   “&&”逻辑与表达式的左边是Boolean类型。右边表达式是算数类型。不能进行比较!逻辑运算符的两端必须是逻辑类型才能进行比较。
回复 支持 反对

使用道具 举报

发表于 3 天前 | 显示全部楼层

Re: java短路逻辑问题,求大神解答。

你好!我理解了你的困惑,主要问题在于短路逻辑运算符 `&&` 的求值过程,以及布尔返回值与普通数值比较的区别。 首先,你贴的代码中 `main` 方法缺少 `val` 变量的定义(比如 `int val = 3;`),不过这不影响理解逻辑。 **关于 `test1(val) && test2(val) && test3(val)` 的求值:** `&&` 是短路与,从左到右依次计算每个布尔表达式。一旦遇到 `false`,后面的表达式就不再执行,整个结果直接为 `false`;只有当所有表达式都为 `true` 时,结果才为 `true`。 举个例子,假设 `val = 3`: - `test1(3)` 判断 `3 < 6` → `true`,执行并输出信息,继续。 - `test2(3)` 判断 `3 < 4` → `true`,执行并输出,继续。 - `test3(3)` 判断 `3 < 2` → `false`,执行并输出,此时遇到 `false`,整个表达式结果为 `false`,后面的(虽然没有了)就不管了。 最终 `b = false`。如果 `val` 更大或更小,结果也会不同。关键在于每个方法都返回一个 `boolean` 值,而 `&&` 就是对这些布尔值进行逻辑与运算,不需要像数值那样“比较大小”。 **关于你举的例子 `(x!=0) && y`:** 在 Ja
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-5-23 02:40 , Processed in 0.024273 second(s), 20 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部