文档章节

[笔记]改善Java程序的151个建议---第二章 基本类型

jimyao
 jimyao
发布于 2016/01/29 14:46
字数 628
阅读 5
收藏 0

第二章 基本类型
8个:byte,char,short,int,long,float,double,boolean

建议21;用偶判断,不用奇判断
public class Client{
     public static void main(String[] args){
          Scanner input = new Scanner(System.in);
          System.out.print("请输入多个数字判断奇偶: ");
          while(input.hasNextInt()){
               int i = input.nextInt();
               String str = i + "->" + (i%2 == 0 ? "奇数" : "偶数");  //用偶数判断
               System.out.println(str);
          }
     }
}

建议22:用整数类型处理货币
(1)用BigDecimal
(2)用整型。参与运算时候,扩大100倍,转换整形,计算后再除100倍。

建议23:不要让类型默默转换
int越界溢出
主动声明式类型转化
long dis = 1L * SPEED * 60 * 8;

建议24: 边界还是边界
边界测试:0,正最大值,负最小值

建议25:不要让四舍五入亏了一方
银行家舍人算法:
舍去位的数字小于5时候,直接舍去;
舍去位的数值大于等于6时候,进位后舍去
舍去位的数值等于5时候,5后面还有其他数字,则进位后舍去;5后面是0,根据5前一位奇偶性来判断是否需要进位,奇数进位,偶数舍去。
用RoundingMode类的Round模式。
//存款
BigDecimal d = new BigDeciMal(88888);
//利率
BigDecimal r = new BigDeciMal(0.000018);
//计算利息
BigDecimal i = d.multiply(r).setScale(2, RoundingMode.HALF_EVEN);

建议26:提防包装类型的null值
Java引入包装类型(Wrapper Types)解决基本类型的实例化问题。如:Integer
List<Integer> list = new ArrayList<>();
list.add(null);//会报错
加入对null的检查
public static int f(List<Integer list>){
     int count = 0;
     for(Integer i : list)
          count += (i != null) ? i : 0;
     return count;
}

建议27:谨慎包装类型的大小比较
基本数据类型用>,<,=比较
包装类型用compareTo方法比较,包装类型实现了Comparable接口

建议28:优先使用整形池
Integer.valueOf在-128至127之间转换为Integer对象,直接从整形池获得。所以是相等。超出这个范围new一个新Integer对象。
在声明包装对象时候用valueOf生产,而不是通过构造函数生产。
判断对象相等时候,用equals方法。

建议29:优先选择基本类型

建议30:不要随便设置随机种子
java中随机数的产生取决于种子,随机数和种子之间的关系原则;
种子不同,产生不同的随机数
种子相同,即使实例不同也产生相同的随机数。
Random默认种子是System.nanoTime()的返回值
java.util.Random
Math.random

© 著作权归作者所有

共有 人打赏支持
jimyao
粉丝 17
博文 66
码字总数 27856
作品 0
朝阳
私信 提问
《编写高质量代码 改善Java程序的151个建议》读书笔记

第7章 泛型和反射 建议94 不能初始化泛型参数的数组 Java的泛型在编译期有效,在运行期被删除,所有的泛型参数类型在编译后都会被擦出掉 Java泛型类和普通类在编译后都指向同一字节码 第8...

OSC_fly
08/23
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
07/25
0
0
Java 私塾第一、二章笔记整理

Java 私塾第一、二章笔记整理 第一章 java入门 一.Java是什么? 一种计算机编程语言 一种软件开发平台 一种软件运行平台(JRE :java runtime environment) 一种软件部署环境 二.Java版本:...

luodis
2011/01/14
245
2
读《深入理解Java虚拟机》- 笔记08

《深入理解Java虚拟机:JVM高级特性与最佳实践》第2版 第10章 早期(编译期)优化 59. 语法糖 在计算机语言中添加某种语法,对语言的功能没有影响,但是方便开发人员使用。 泛型是一种语法糖...

阿历Ali
08/18
0
0
《编写高质量代码:改善java程序的151个建议》笔记

前言: 很喜欢作者的前言: 对于java,我非常感激,从物质上来说,它给了我工作,帮我养家糊口;从精神上来说,它带给我无数的喜悦、困惑、痛苦、无奈------一如我们的生活。 第10章:性能和...

城固如春
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 MySQL 的二进制日志恢复数据库数据

经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响。所以本文我们将和大家一起分享学习下如何通过 MySQL 的二...

吴伟祥
8分钟前
0
0
org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may

org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may 2017年07月21日 14:52:10 子木HAPPY阳VIP 阅读数:14134 标签: tomcatnginx 更多......

linjin200
9分钟前
0
0
线下工坊|Blockchain Coding Day:零基础教你开发DAPP(北京)

我们的目标是通过编程学习让你更了解区块链技术。这将对区块链开发初学者一次很好的体验。这里需要强调一下,编程零基础也能学会。 我们将以小组的形式,由教练带领学员完成DAPP开发。每位学...

HiBlock
46分钟前
2
0
查看内存情况

jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。...

Canaan_
47分钟前
2
0
基于对象特征的推荐

(本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 在上一期基于协同过滤的的推荐场景中,我们介绍了如何通过PAI快速搭建一个基于协同过滤方案的推荐系统,这一节会介绍一些如何基...

阿里云官方博客
55分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部