EffectiveJava-2
一、使用类库
使用类库的好处:
- 无须关心方法是如何实现的,由算法专家花了大量时间设计、实现和测试这个方法,不仅保证了正确性,而且一旦有缺陷,下一个版本就会修复。
- 不必浪费时间为哪些与工作不太相关的问题提供特别的解决方案,应该吧时间花在应用程序上,而不是底层的细节上。
- 它们的性能往往会随着时间的推移而不断提高,无须你做任何努力。
- 它们会随着时间的推移而增加新的功能。
- 使用类库可以让自己的代码融入主流,是代码更易读,更易维护、更易被大多数开发人员重用。
如果有时间,每个重要的发行版本,都要去看看增加和修改了哪些特性。
二、如果想要正确的答案,请避免使用float和double
- float和double类型不适合用于货币计算,如:
System.out.println(1.03-0.42);
此行代码会输出:0.6100000000000001
- 如果想要精确计算,请使用BigDecimal、int或者long进行计算。
总结:
- 对于任何需要精确答案的计算任务,请不要使用float或者double。
- 使用BigDecimal,系统会处理十进制小数点,可以完全控制舍入,可以从八种舍入模式中选择其一,若数值超过18位,就必须使用BigDecimal。但可能会带来因为不使用基本类型产生的不便。
- int需要自己处理十进制小数点,所涉及的数值不可太大,若数值范围没有超过9位十进制数字,就可以使用int。
- long也需要自己处理十进制小数点,若数值范围没有超过18位十进制数字,就可以使用long。
参考:《Effective java》P224~P229
EffectiveJava-2的更多相关文章
- EffectiveJava——请不要在代码中使用原生态类型
先看一个栗子,看看能不能找出来里面的错误: /** * 请不要在新代码中使用原生态类型 * @author weishiyao * */ public class Test { public stat ...
- EffectiveJava——用函数对象表示策略
有些语言支持函数指针.代理.lambda表达式,或者支持类似的机制,允许程序把“调用特殊函数的能力”储存起来并传递这种能力.这种机制通常用于允许函数的调用者通过传入第二个函数,来指定自己的行为.比较器 ...
- EffectiveJava——类层次优于标签类
标签类: 有时候,可能会遇到带有两种甚至更多钟风格的类的实例的类,并包含表示实例风格的(tag)域.例如下面这个类,它能够表示圆形或者矩形: /** * 类层次优先与标签类 * @author wei ...
- EffectiveJava——接口优于抽象类
Java程序设计语言提供两种机制,可以用来定义允许多个实现的类型:接口和抽象方法,这两者直接醉为明显的区别在于,抽象类允许某些方法的实现,但接口不允许,一个更为重要的区别在于,为了实现由抽象类定义的类 ...
- EffectiveJava——复合优先于继承
继承时实现代码重用的重要手段,但它并非永远是完成这项工作的最佳工具,不恰当的使用会导致程序变得很脆弱,当然,在同一个程序员的控制下,使用继承会变的非常安全.想到了很有名的一句话,你永远不知道你的用户是 ...
- EffectiveJava笔记(第一部分)
考虑用静态构造方法代替构造器的好处: 1.静态构造方法有名字 BigInteger.probablePrime(int, int, Random)比 new BigInteger(int, i ...
- <EffectiveJava>读书笔记--02泛型数组
1, java中可以申明泛型类型的数组引用; 2, 但是不能实例化一个泛型数组对象; 3, 针对第二点, 可以曲线救国, 实例化一个Object数组, 再进行类型强转; 见代码如下: public c ...
- <EffectiveJava>读书笔记--01继承的使用注意
1, 父类的构造器方法中不能调用能够被子类重写的方法. 分析: 当初始化一个子类时, 首先要初始化父类, 即调用父类的构造方法; 如果父类的构造方法中调用了可被重写的其它方法, 那么此时调用的其实是该 ...
- EffectiveJava阅读笔记(一)
考虑用静态工厂方法代替构造器 一.概述 二.使用静态工厂的优势 获取类对象的两种方式: 使用公有构造方法 静态工厂方法 1.介绍 有名称 不必每次调用时创建一个新对象 可以返回原类型的任何子类型对象 ...
- EffectiveJava(30) -- 全面解析enum类型
--在大多数项目中,我们会经常使用int类型来声明final类型的常量,它在不考虑安全的情况下确实能满足我们绝大多数的需求.但是在JDK1.5版本发布之后,声明一组固定的常量组成合法值的类型就建议使用 ...
随机推荐
- SpringBoot系列:Spring Boot使用模板引擎Thymeleaf
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...
- IMongoQuery的使用-C#
一.Mongodb的IMongoQuery的使用 引用命名空间:MongoDB.Driver;MongoDB.Driver.Builders; Query.All("name", ...
- Redis之安装配置(Windows)
下载 下载地址:https://github.com/MSOpenTech/redis/releases 解压,文件的名字重命名为redis. 打开文件夹,内容如下: 发送redis-server.e ...
- 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考)
本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclipse作为示例,过程挺全的,可作为参考) 本人亲测-SSM环境搭建(使用eclip ...
- asp.net core 3.0 中使用 swagger
asp.net core 3.0 中使用 swagger Intro 上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用,那个项目的 api 比较简单,都是匿名接口 ...
- idea 添加 注释 配置
为类添加自动注释模版 File-->Settings-->Editor-->File and Code Templates 启用该模板才有效一定要勾上 /** * @author : ...
- Fiddler的安装
相关下载软件(链接:https://pan.baidu.com/s/1HFdFNph6FGHOFtZq09ldpg 提取码:3u3l ) fiddler是基于.net环境的,所以需要先安装.net 安 ...
- Vue学习笔记和代码记录
## 安装 * 直接引入链接:建议初学者使用:* 通过node.js的NPM安装Vue:* 通过node.js的NPM安装Vue-cli脚手架(推荐安装方式): ## 基础 ### 数据类型 * 字符 ...
- 生成函数(TBC)
生成函数 生成函数 (Generating Function) 的应用简单来说在于研究未知(通项)数列规律,用这种方法在给出递推式的情况下求出数列的通项. 对于一个数列 aaa,称f(x)=∑i=0n ...
- [BZOJ2392][HAOI2011]Problem c
Description 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了, ...