逻辑与和简洁与的区别

书中所说,简洁与只要左边为false就不用计算右边,可我认为逻辑与也同样适用啊

逻辑与运算符在判断第一个条件为假时,就不会再判断第二个条件;简洁与运算符会对两个条件都进行判断,不论第一个条件是否为假。

你这个是问题吗?

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7738846
  • 这篇博客你也可以参考下:给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。 如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
  • 除此之外, 这篇博客: 写一个来电话时出现的悬浮窗,一站解决黑马手机卫士来电悬浮窗的高版本安卓系统的适配问题中的 如果此方法返回false说明没有开启在其他应用上层显示 这时我们需要让用户手动去开启 否则无法使用悬浮窗 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Toast.makeText(getApplicationContext(),"请给予悬浮窗权限",Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivityForResult(intent, START_WINDOW);
    

    /*************************************************************************************************************/

  • 以下回答由chatgpt基于相关博客总结生成:

    简洁与和逻辑与的区别在于,当左边为false时,简洁与不会再计算右边,而逻辑与则会计算右边表达式。其实可以这样理解:对于简洁与,如果左边为false了,那么不管右边是true还是false,整个表达式的值都是false,所以不用再去计算右边;而对于逻辑与,虽然左边是false了,但右边为true的时候,整个表达式的值还是true,所以需要再计算右边。因此,在使用简洁与和逻辑与的时候,需要根据实际情况进行选择,一般来说,如果右边的计算比较复杂,且左边表达式的值为false的概率比较大,就应该使用简洁与,以提高效率。

    下面是简洁与和逻辑与的代码示例:

    //简洁与:
    if (a != null && a.length > 0) {
        //执行语句
    }
    
    //逻辑与:
    if (a != null && a.length > 0) {
        //执行语句
    }
    

    需要注意的是,如果右边的表达式会有副作用,例如会改变变量的值等,那么一定要使用逻辑与,否则可能会出现一些问题。例如:

    //逻辑与:
    int i = 0;
    boolean b = (i++ > 0) &amp;&amp; (i++ < 5); //b的值为false,i的值为1
    System.out.println("b=" + b); //输出b=false
    System.out.println("i=" + i); //输出i=1
    
    //简洁与:
    int i = 0;
    boolean b = (i++ > 0) && (i++ < 5); //b的值为false,i的值为1
    System.out.println("b=" + b); //输出b=false
    System.out.println("i=" + i); //输出i=1
    

    在这个例子中,逻辑与和简洁与的表达式结果都是false,但是使用简洁与的时候,右边的表达式没有被执行,i 的值仍然是0,而使用逻辑与时,右边的表达式被执行了,i 的值变成了1,这可能会对程序的逻辑产生影响,导致程序出错。因此,尽量避免在简洁与中使用会有副作用的表达式。