大家好,今天想要和大家分享的主题是Oracle的逻辑运算符是否短路。
首先说明一下什么是短路逻辑运算符,首先使用java的短路逻辑运算符&&和||来举例,代码如下
public class ShortCircuitTest {
public static void main(String[] args) {
if((isItSmall(3)) || (isItSmall(7))) {
System.out.println("Result is true");
} else {
System.out.println("Result is false");
}
if((isItSmall(6)) && (isItSmall(3))) {
System.out.println("Result is true");
} else {
System.out.println("Result is false");
}
}
public static boolean isItSmall(int i) {
if(i < 5) {
System.out.println("i < 5");
return true;
} else {
System.out.println("i >= 5");
return false;
}
}
}/* Output:
i < 5
Result is true
i >= 5
Result is false
*/
从以上程序的输出信息可以得出结论,短路不会浪费时间在无意义的计算上。
形式为exp1 && exp2,如果&&运算符左边的运算表达式exp1为false,那么其右边的运算表达式exp2不进行计算,因为&&运算符已经知道完整的表达式不可能是true,所以直接返回false
形式为exp1 || exp2,如果||运算符左边的运算表达式exp1为true,那么其右边的运算表达式exp2不进行计算,因为||运算符已经知道完整的表达式不可能是false,所以直接返回true
下面来讨论Oracle的逻辑运算符是否短路,本人的测试数据库是Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
首先创建一个测试function
create or replace function f return number is
begin
dbms_output.put_line('f');
return(1);
end f;
这个function的作用是用来验证是否被执行,如果执行会打印出字符串“f”
(1)验证sql语句的逻辑运算符是否短路
select 'x' from dual where (1 = 0 and f = 1);--打印出f
select 'x' from dual where (1 = 1 or f = 1);--没有打印信息
说明sql语句中的逻辑运算符and不具备短路功能,而or具备短路功能。
(2)验证plsql语句的逻辑运算符是否短路
begin
if 1 = 0 and f=1 then
null;
end if;
end;
--没有打印信息
begin
if 1 = 1 or f=1 then
null;
end if;
end;
--没有打印信息
说明plsql语句中的逻辑运算符and和or都具备短路功能。
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
分享到:
相关推荐
Oracle笔记主要涵盖了Java编程语言的基础知识点,包括数据类型的使用、二进制转换、位运算、逻辑运算符、基本数据类型、类型转换、运算符、三元运算符等内容。本篇笔记详细记录了标识符的命名规则、不同进制之间的...
- **&&**: 逻辑运算符,短路逻辑与运算。只有当两边的操作数都为真时才返回真;若左边为假,则右边的表达式不会被计算。 ### 5. Collection 和 Collections 的区别 - **Collection**: 接口,所有单列集合类的父...
5.3.4 逻辑运算符(短路运算符) 5.3.5 逻辑字运算符 5.3.6 算术运算符 5.3.7 自动递增和自动递减运算符 5.3.8 位逻辑运算符 5.3.9 条件运算符 5.3.10 范围运算符 5.3.11 特殊字符串运算符和...
例如,逻辑运算符分为短路计算(&&和||)和非短路计算(&和|),位运算符如异或(^)和按位取反(~)。赋值运算符允许在表达式中进行类型转换,但不能在数值类型和复合类型之间强制转换。 Java中的流程控制包括条件语句...
第三部分展示了逻辑运算符 `|` 和 `||` 的区别以及方法调用的影响。在Java中,`|` 是按位或运算符,而 `||` 是逻辑或运算符,短路特性意味着如果左侧表达式已经确定结果,右侧就不会再计算。在本例中,`methodB(4)`...
10. **逻辑运算符&和&&**:在Java中,`&&`运算符称为短路逻辑与,如果第一个操作数为`false`,则不会评估第二个操作数。`&`运算符则是非短路逻辑与,不论前一个操作数是什么,都会评估第二个操作数。 11. **事务与...
- `&&` 是逻辑与运算符,具有短路特性,如果前面的条件为假,就不会再执行后面的表达式。 4. **HashMap和Hashtable的区别**: - `Hashtable` 是基于`Dictionary`的老式容器,不支持null键和值,且所有方法都是...
- `&&`是逻辑运算符,只有在左侧表达式为真时才会评估右侧表达式,这被称为短路运算。 5. HashMap 和 Hashtable 的差异 - `HashMap`是非同步的,允许null键和null值,性能通常优于`Hashtable`。 - `Hashtable`是...
b1 && b2 || b2`的值为false,这里涉及到了逻辑运算符的短路特性。 6. **算术运算**:表达式`(18-4)/7+6`的结果是8,这涉及到数学运算的顺序和整数除法。 7. **布尔运算**:表达式`5>2 && 8的运算结果为false,...
教学过程中的难点在于理解短路逻辑运算符,包括短路与(&&)和短路或(||)。短路运算符的特点是如果左侧表达式的值足以决定整个表达式的结果,右侧表达式就不会被执行,这在条件判断中非常重要。 通过“做,学,教...
【逻辑运算符】Java中的逻辑运算符包括&&(逻辑与),||(逻辑或),!(逻辑非)。运算符&&用于短路逻辑与,如果第一个操作数为假,就不会计算第二个操作数。 【位运算】位运算符作用于整型或字符型数据,如&(按位...
- 表达式`b=i||methodB(8)`中,由于`i已经为真,因此短路逻辑运算符`||`不会执行后面的`methodB(8)`,故`j`的值仍然为4。 - **答案**:B. The program prints “4” 以上是对给定文件信息中提到的知识点的详细分析...
- **逻辑运算符**:用于组合多个条件,如`&&`(与)、`||`(或)、`!`(非)等。其中,`&&`和`||`支持短路运算。 #### 五、控制语句的应用 - **if语句**:用于基于条件执行代码块。 - **switch语句**:用于根据...
- 短路逻辑运算符`&&`和`||`会根据前一个表达式的值决定是否继续计算后续表达式。 以上内容涵盖了Java基础知识的核心部分,对于初学者来说是非常重要的学习材料。希望这些知识点能够帮助到正在学习Java编程的朋友...
- 逻辑运算符包括&(逻辑与)、&&(短路与)、|(逻辑或)、||(短路或)。 - 在Java中,数组是一种特殊的引用数据类型,可以存储同一类型的多个值。 5. **控制结构** - `break`语句常用于退出switch语句或循环...
&和&&都是逻辑运算符,但&会始终计算两边的操作数,而&&遵循短路原则,如果左边为假,则不会计算右边。在多重嵌套循环中,使用break语句配合标签可以跳出最内层循环。关于equals和hashCode,两个对象值相等(equals...
题目三考察了条件语句中逻辑运算符的使用。在第17行的`if`语句中,条件为`(x == 4) && !b2`。这里的关键在于理解逻辑与(`&&`)的短路行为以及逻辑非(`!`)的使用。 - `x == 4`: 检查`x`是否等于4,此处`x`的值为5...
- **&** 是位运算符,当用作逻辑运算符时,它执行短路逻辑运算。 - **&&** 也是逻辑运算符,但它执行的是短路逻辑运算。这意味着如果第一个表达式为 false,则不会评估第二个表达式。 #### 五、Collection 和 ...
- **逻辑运算符**: - `&` 逻辑与: 当两边都是 `true` 时结果为 `true`。 - `|` 逻辑或: 任意一边为 `true` 时结果为 `true`。 - `!` 逻辑非: 对后边的布尔值进行取反操作。 - `&&` 短路与: 左侧为 `false` 时不...
=、<、>、、>=)、逻辑运算符(!、&&、||)以及位运算符等。其中,&和&&的区别在于,&始终会执行两边的操作,而&&遵循短路逻辑,如果前一个操作数为假,就不会执行第二个操作数。 【关键字】 Java的关键字是被语言...