java代码编写出现的陷阱-2:阴沟里翻船
(1) 警惕自增的陷阱
java一元运算符有++,--, i++表示先赋值后加1,++i表示先加1后赋值,--同理,但是如果遇到以下代码,你恐怕是阴沟里翻船,不多说,看代码:
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 10; i++) {
count = count++;
}
System.out.println("count:"+count);
}
貌似是count自加10次,等于10吗?运行结果是0, 因为java对自加的处理是:首先把count的值(不是引用),拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值,详细步骤:
步骤1: JVM把count值(当前值为0)拷贝到临时变量区
步骤2: count值加1,这时候count的值是0
步骤3: 返回临时变量区的值,注意这个值是0,没修改过
步骤4: 返回值赋给count,此时count值又被重置为0,如此循环n次都是同样的结果。
可以将count = count++ 改成 count++即可.
(2)break不可丢,尤其是switch结构中
break可以用于终止一段代码的运行,比如循环中break用于跳出整个循环结构,switch用于跳出一个case分支并且不进入其他分支结构的作用,这很重要,不信你看:
String str = "";
int num = 2;
switch (num) {
case 0: str = "零";
case 1: str = "壹";
case 2: str = "贰";
case 3: str = "叁";
case 4: str = "肆";
case 5: str = "伍";
case 6: str = "陆";
case 7: str = "柒";
case 8: str = "捌";
case 9: str = "玖";
case 10: str = "拾";
}
System.out.println(str);
打印的结果是:拾, 这是因为switch结构中,case分支判断成立后,执行case块中的代码,执行完成后,如果没有遇到break关键值,后面的case分支都不进行条件判断,直接执行后面的所有case块代码,这太可怕了.
(3)奇偶判断没你想的那么随便.
什么是奇数,什么是偶数? 能被2整除的除数为偶数,反之则为奇数, 众所周知,那么程序判断是否也是可以有两个公式呢:
1> num%2==0?"偶数":"奇数" ; 2> num%2==1?"奇数":"偶数" 。
想都不想,当然都行啊,随便用。 未必哦,看代码先:
int num = -1;
System.out.println(num%2==1?"奇数":"偶数");
打印的是: 偶数, 靠,有木有搞错。原因是这样的,java中取余算法的模拟代码如下:
${被除数} - ${被除数}/${除数} * ${除数} ,所以咯,-1%2 结果是-1当然不等于1啦.
最好的方式是,用偶判断吧[ num%2==0?"偶数":"奇数" ], 那样才是百分百正确的.
转载于:https://blog.51cto.com/javacrazy/1375784
java代码编写出现的陷阱-2:阴沟里翻船相关推荐
- java代码编写出现的陷阱-1:警惕变长参数
在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,调用的时候可以给出任意多个参数也可不给参数. 如method(Ob ...
- 使用java代码编写脚本,把oracle建表语句变成hive建表语句
使用java代码编写脚本,把oracle建表语句变成hive建表语句 java代码 测试oracle.sql 生成hive创表语句 java代码 import java.io.File; import ...
- 长沙北大青鸟java 学费_长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二)...
原标题:长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二) 文件名规范 1.一个Java源文件只能存储个Java类. 2.文件名与Java类名相同. 3.一个类文件的代码行 ...
- Java代码编写猜拳小游戏
Java代码编写猜拳小游戏 import java.util.Random; import java.util.Scanner;public class Guess {public static vo ...
- 猜数字小游戏(java代码编写)
猜数字小游戏(java代码编写) 给大家一个用java代码编写的猜数字小游戏 // 导入随机数包import java.util.Random;// 导入从键盘接收数据的函数import java.u ...
- 阴沟里翻船——学霸的迷宫
问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维 的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀 ...
- JavaScript阴沟里翻船之运算符优先级
首先欢迎大家关注我的Github博客,也算是对我的一点鼓励,毕竟写东西没法变现,坚持下去也是靠的是自己的热情和大家的鼓励.各位读者的Star是激励我前进的动力,请不要吝惜. 起源 写了两年的 ...
- [codeforces 1304A] Cow and Haybales 阴沟里翻船
Codeforces Round #621 (Div. 1 + Div. 2) [codeforces 1304A] Cow and Haybales 阴沟里翻船 总目录详见https://blo ...
- 阴沟里翻船,我将11月2日定为每年的受耻日!
前几天SQL注入的问题,第二天就赶紧做了一个紧急修补,不过全面检查还没做,今天发现有人在网站上留言,说暴了我们的库(其实就暴了一个遗弃的表),并列出得到的一些数据,直指我本人,说本人技术超烂等等的话. ...
最新文章
- R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
- django2 mysql配置_Django:Python3.6.2+Django2.0配置MySQL 转载
- 洛谷 P1019 单词接龙 Label:dfs
- 隐私计算--联邦学习
- 产品经理的成长历程(宏观)
- 历届试题 分考场(DFS,染色问题)
- COGS 36. 求和问题
- 检测和语义分割_分割和对象检测-第5部分
- ceph中查看一个rbd的image的真实存储位置
- Angular项目中核心模块core Module只加载一次的实现
- 发送当前IP到我的手机
- EOS1.1版本新特性介绍
- raw data/PF data/Q30 data/clean data的不同
- 物联网之有线通信技术之短距离的现场总线
- 中大计算机学院不及格,大学要求越来越严格 | 学渣可能无法从中大毕业了
- 汽车智造(一)| 移动机器人(AGV AMR)如何赋能汽车行业制造升级
- 计算机网络实验:无线组网
- 不同进制之间的转换的各种方法
- 华为matebook电脑屏幕亮度动态变化的解决办法
- 2.89亿元寻求股权转让“接盘侠”!紫光存储风波未平,紫光德瑞风云再起