文档章节

[笔记]改善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虚拟机》- 笔记08

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

阿历Ali
08/18
0
0
云栖社区专家系列课——Java必修课第一讲

本节课为 Java必修课第一讲。在本节课中,最课程创始人、微软MVP陆敏枝为了大家介绍了当前Java行业的IT人才供需情况、Java基本语法、JDK的下载与安装、Java环境变量的配置以及第一个Java程序...

笑傲江湖lcx
07/03
0
0
《编写高质量代码:改善java程序的151个建议》笔记

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

城固如春
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
2
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
5
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
33
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部