书中所说,简洁与只要左边为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);
/*************************************************************************************************************/
简洁与和逻辑与的区别在于,当左边为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) && (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,这可能会对程序的逻辑产生影响,导致程序出错。因此,尽量避免在简洁与中使用会有副作用的表达式。