两条if语句,后面一条判断总是true,但交换顺序后两条都正常了。

if (!fileName.endsWith(".exe")) {
throw new IOException("文件后缀名不对");
}
if (!fileName.equals("C:\abc.exe")) {
throw new FileNotFoundException("文件名称不对");
}
以上代码两条if语句都没问题

if (!fileName.equals("C:\abc.exe")) {
throw new FileNotFoundException("文件名称不对");
}
if (!fileName.endsWith(".exe")) {
throw new IOException("文件后缀名不对");
}
以上代码第二条if判断语句总为true
这是为什么呢?

if (!fileName.equals("C:\abc.exe")) {
throw new FileNotFoundException("文件名称不对");
}  

这个的条件指该文件是否不存在
实际上已包含

if (!fileName.endsWith(".exe")) {
throw new IOException("文件后缀名不对");
}

这个条件里面的后缀名是否正确了,就是说第一个条件成立了,那么后面这个条件就肯定也成立的

分析:
第一个if判断条件明显包含第二个if判断条件。也就是第一个if判断条件满足的时候,第二个肯定也是满足的。
第一个判断不满足的时候,会抛出异常。抛出异常后面的代码不会再执行。
不好理解的话,把判断中的取反!去掉吧。
如有帮助,望点击【本回答采纳】支持一下。

if (!fileName.equals("C:\abc.exe")) {
throw new FileNotFoundException("文件名称不对");
}
if (!fileName.endsWith(".exe")) {
throw new IOException("文件后缀名不对");
}

img