Java规则之条件语句中做空判断时使用||和&&常犯的错误

错误代码示例:

public String bar(String string) {
//error 1
if (string!=null || !string.equals(""))
return string;
//error 2
if (string==null && string.equals(""))
return string;
//error 3
if (string.equals(baz) && string != null)
return string;
//error 4
if (string.equals(baz) || string == null)
return string;
}

在Java中,逻辑运算符&&(短路与)和||(短路或)具体运算规则如下:

&&的运算规则:

i.当符号左边表达式为false时,&&将直接返回false不在判断符号右边表达式的结果。

ii.当符号左边表达式为true时,将继续判断符号右边表达式,||的结果与右边表达式结果一致。

||的运算规则:

i.当符号左边表达式为true时,||将直接返回true不在判断符号右边的表达式结果。

ii.当符号左边表达式为false时,将继续判断符号右边表达式,&&的结果与右边表达式结果一致。

根据&&和||的运算规则,下面我们来对以上错误实例进行分析。

error1:

实例中当string为null时,string!=null为false,将继续判断||右边的表达式,执行!string.equals("")时,由于string为null,程序将抛出NullPointerException。此处的||应该改成&&。

error2:

实例中由于是且运算当string为null,继续执行string.equals("")时抛出NullPointerException。应将&&改成||。

error3和error4实例中都是因为空判断的位置错误,当string为空时会引起NullPointerException。应将空判断放到逻辑符号左边。

正确实例如下:

public String bar(String string) {
//example1 ,||改成&&
if (string!=null && !string.equals(""))
return string;
//example2,&&改成||
if (string==null || string.equals(""))
return string;
//example3,改成(string != null)放在逻辑符号左边判断
if (string != null && string.equals(baz))
return string;
//example4 同上
if (string == null ||string.equals(baz))
return string;
}

  

原文地址:https://www.cnblogs.com/-flq/p/10399419.html

时间: 2024-08-05 20:01:23

Java规则之条件语句中做空判断时使用||和&&常犯的错误的相关文章

Java 语法 索引 ----- 条件语句(If Else,Switch)

if (x < 1) System.out.print(x + " < 1"); else if (x > 1) System.out.print(x + " > 1"); else System.out.print(x + " == 1"); Switch switch (y) { case 0: System.out.print(y + " is 0"); break; case 1: System

信息安全事故中企业常犯的错误

古语云:"亡羊补牢,犹未为晚".随着信息化的飞速发展,企业的信息安全正受到日益严峻的挑战,近年来,很多大企业都遭受到了攻击而泄露数据的事故,更何况一些中小企业或个人.最近的iCloud信息泄露事件,不仅"坑到"了众多好莱坞女星,也再一次在信息安全领域拉响了数据危机警报. 企业在受到攻击数据泄露后,尤其是对外部,如果不能正确处理,将导致事态恶化,并对企业品牌.业绩造成二次打击,更有甚者会带来进法律风险.如何有效的处理,这其实是<信息安全管理实施指南>即IS

Java 基础 之 条件语句

http://www.verejava.com/?id=16992610131518 /* 流程控制语句分为 1. 条件语句 2. 分支语句 3. 循环语句 */ import java.util.Scanner; public class Statement { public static void main(String[] args) { //1.条件语句 /* 包括: 1. if(表达式){语句} 2. if(表达式){语句}else{语句} 3. if(表达式){语句}else if{

Vue中在template标签中进行判断时注意比较元素

(一)比较的元素,一个是data元素,另外一个是常量,如下图所示: 编译正常,运行正常,效果在期望中,会显示Hello World,结果如下: (二)比较的元素,一个是data元素,另外一个是const常量,如下图所示: 编译正常,运行正常,效果在意料之外,不会显示Hello World. (三)比较的元素,两个都是data元素,如下图所示: 编译正常,运行正常,效果在期望中,会显示Hello World,结果如下: 将const常量赋值给data的一个元素,然后将它作为判断条件的一个元素,不能

java中自己常犯的错误汇总

1package debug; 2 3/* 4 1.定义一个公共的动物类,包含名字.年龄.颜色和吃饭东西方法 5 2.定义一个猫类,继承动物类,同时拥有玩游戏的本领 6 3.定义一个狗类,继承动物类,同时拥有看门的本领 7/ 8 9class Animal{10private String name;11privateint age;12private String color;1314public Animal() {1516 }1718publicAnimal(String name,int

在CMMI推广过程中EPG常犯的错误(转)

本文转自: http://developer.51cto.com/art/200807/86953.htm 仅用于个人收藏,学习.如有转载,请联系原作者. ---------------------------------------------------------------------------------------------------------------------------- 1对模型研究不够深入 模型是多年软件工程经验的总结,里面的每一句话,每个例子都不是随便写上去的

JAVA 基础 /第十六课: 控制流程 / JAVA的IF 条件语句

2018-03-07 1.if if ( 表达式1 ){ 表达式2; } 如果表达式1的值是true,就执行表达式2 public class HelloWorld { public static void main(String[] args) { boolean b = true; //如果成立就打印yes if(b){ System.out.println("yes"); } } } 2.多表达式与一个表达式 public class HelloWorld { public st

sql中在查询语句中加判断,控制输出的内容

Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式. 还有一个需要

for语句中加入时间判断

# cat /usr/local/bin/tjpac.sh #!/bin/bash Date=`date +%Y%m%d` Time=`date +%H:%M` SHDIR1=/aa/bb/cc TJDIR1=/ee/dd/cc /usr/bin/touch /log/tjpaclog/$Date.log /bin/echo "sync begin at `date +%H:%M`" > /log/tjpaclog/$Date.log cd ${SHDIR1} for Job i