众所周知,Java的选择结构和循环结构是允许单行不加大括号的 有的资料上会提倡这种模式,因为可以缩减代码的行数 也有的不提倡,认为可能会在后期添加行数很麻烦以及出现意外的错误 下面略举3例加以阐释:
“空悬”的else引发问题
public class Test1 {
public static void main(String[] args) {
int x = 300;
if (x > 100)
System.out.println("大于100");
if (x > 400)
System.out.println("大于400");
else
System.out.println("??");
}
}
这个程序的输出是什么? 你可能会认为是:
大于100
因为会执行外层if不执行内层if,else的缩进对应着外层if… 很抱歉,真实的输出是这样的:
大于100
??
这里就涉及到一个“空悬”的else的“归属问题”了 Java不同于Python,Python是识别缩进的,Java认的是大括号,说的不好听点就是你不缩进写的一坨也许也没事(只要你和你的小伙伴忍受得了) 在没有指示的情况下,JVM会认为else对应着内层的if,所以就得到了“异常”的输出
“空悬”的if引发问题
public class Test2 {
public static void main(String[] args) {
int x = 200;
if (x > 100)
x++;
else
x--;
System.out.println(x);
}
}
这个程序特别简单,肯定没问题,输出:
201
但是如果我后续加代码成这样:
public class Test2 {
public static void main(String[] args) {
int x = 200;
if (x > 100)
x++;
if (x > 300)
x++;
else
x--;
System.out.println(x);
}
}
输出结果:
200
其实就是说else归属于第2个if了,先x++,后x–,就保持了200
这些问题就是说if后接单行代码,后续维护时没注意产生问题
打分号但不换行以为还是一行
public class Test3 {
public static void main(String[] args) {
int x = 3;
if (x > 2)
if (x > 3)
x++; x+=2;
System.out.println(x);
}
}
输出结果:
5
这是因为Java以;作为换行符,可能初学者认为自己没换行,实际上程序已经默认你换行了 x+=2;语句的条件已经不在if内了,所以会被执行
举的例子简单的不能再简单了,但是在实际的开发中如果有一点点的错误都可能产生很大的问题,我就体会过,所以建议读者养成良好的习惯,不应该省略的就不要省略 之前看网上写的:程序员总是喜欢假设他们自己是对的 人都希望自己是对的,这点我不否认,但是如果你是一个认真负责的人,就应该做好最坏的假设不是吗? 记得之前看有的学了半年多编程的人写的代码,一个简简单单的问月份算价格的程序 居然有这样的结构:
......
if(x>=4&&x
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?