(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:阴沟里翻船相关推荐

  1. java代码编写出现的陷阱-1:警惕变长参数

    在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用,调用的时候可以给出任意多个参数也可不给参数. 如method(Ob ...

  2. 使用java代码编写脚本,把oracle建表语句变成hive建表语句

    使用java代码编写脚本,把oracle建表语句变成hive建表语句 java代码 测试oracle.sql 生成hive创表语句 java代码 import java.io.File; import ...

  3. 长沙北大青鸟java 学费_长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二)...

    原标题:长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二) 文件名规范 1.一个Java源文件只能存储个Java类. 2.文件名与Java类名相同. 3.一个类文件的代码行 ...

  4. Java代码编写猜拳小游戏

    Java代码编写猜拳小游戏 import java.util.Random; import java.util.Scanner;public class Guess {public static vo ...

  5. 猜数字小游戏(java代码编写)

    猜数字小游戏(java代码编写) 给大家一个用java代码编写的猜数字小游戏 // 导入随机数包import java.util.Random;// 导入从键盘接收数据的函数import java.u ...

  6. 阴沟里翻船——学霸的迷宫

    问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维 的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀 ...

  7. JavaScript阴沟里翻船之运算符优先级

     首先欢迎大家关注我的Github博客,也算是对我的一点鼓励,毕竟写东西没法变现,坚持下去也是靠的是自己的热情和大家的鼓励.各位读者的Star是激励我前进的动力,请不要吝惜.   起源   写了两年的 ...

  8. [codeforces 1304A] Cow and Haybales 阴沟里翻船

    Codeforces Round #621 (Div. 1 + Div. 2) [codeforces 1304A] Cow and Haybales   阴沟里翻船 总目录详见https://blo ...

  9. 阴沟里翻船,我将11月2日定为每年的受耻日!

    前几天SQL注入的问题,第二天就赶紧做了一个紧急修补,不过全面检查还没做,今天发现有人在网站上留言,说暴了我们的库(其实就暴了一个遗弃的表),并列出得到的一些数据,直指我本人,说本人技术超烂等等的话. ...

最新文章

  1. R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
  2. django2 mysql配置_Django:Python3.6.2+Django2.0配置MySQL 转载
  3. 洛谷 P1019 单词接龙 Label:dfs
  4. 隐私计算--联邦学习
  5. 产品经理的成长历程(宏观)
  6. 历届试题 分考场(DFS,染色问题)
  7. COGS 36. 求和问题
  8. 检测和语义分割_分割和对象检测-第5部分
  9. ceph中查看一个rbd的image的真实存储位置
  10. Angular项目中核心模块core Module只加载一次的实现
  11. 发送当前IP到我的手机
  12. EOS1.1版本新特性介绍
  13. raw data/PF data/Q30 data/clean data的不同
  14. 物联网之有线通信技术之短距离的现场总线
  15. 中大计算机学院不及格,大学要求越来越严格 | 学渣可能无法从中大毕业了
  16. 汽车智造(一)| 移动机器人(AGV AMR)如何赋能汽车行业制造升级
  17. 计算机网络实验:无线组网
  18. 不同进制之间的转换的各种方法
  19. 华为matebook电脑屏幕亮度动态变化的解决办法
  20. 2.89亿元寻求股权转让“接盘侠”!紫光存储风波未平,紫光德瑞风云再起

热门文章

  1. invalid alteration of datatype(varchar2转化clob)
  2. 《小成本对付宽带我世界实现有线/无线同时上网》配置要点
  3. 关于新道格电涡流传感器的产品介绍
  4. MCP73832T-2ACI/OT
  5. QML进阶--Loader实现组件的动态切换
  6. 串行通信 现场总线(网络)
  7. 《Blender建模练习:人物模型多边形建模》
  8. JSDB.io - Javascript 的 Framework、Library 和 Tool 分類
  9. 洛必达求极限法则的通俗理解
  10. P27 JTextField文本框