1.String类空间概述( 四 )


2.效率
package java_se.java_jinjie.neibulei.demo06;/*** 验证StringBuilder效率高于String* 效率:StringBuilder>StringBuffer>String*/public class demo04 {public static void main(String[] args) {//开始时间long start=System.currentTimeMillis();//String实现String string="";for (int i = 0; i < 99999; i++) {string+=i;}System.out.println(string);//StringBuilder实现//StringBuilder sbi = new StringBuilder();//for (int i = 0; i < 99999; i++) {//sbi.append(i);//}//System.out.println(sbi.toString());//StringBuffer实现//StringBuffer sb = new StringBuffer();//for (int i = 0; i < 99999; i++) {//sb.append(i);//}//System.out.println(sb.toString());//结束时间long end =System.currentTimeMillis();//StringBuilder循环9999:用时4 循环99999:21 21 20 19 22平均20.6//StringBuffer循环9999:用时5 循环99999:23 20 20 20 23平均21.2//String循环9999:用时297 循环99999:16091System.out.println("用时"+(end-start));}}
5. 1.由来
百度解释: java在java.math包中提供的API类,用来对超过16位有效位的数进行精确的运算 。双精度浮点型变量可以处理16位有效数 。在实际应用中,需要对更大或者更小的数进行运算和处理 。float和只能用来做科学计算或者是工程计算,在商业计算中要用java.math. 。所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法 。方法中的参数也必须是的对象 。
通俗易懂就是: flaot和处理小数时会出现精度缺失,于是就引进了对象处理小数 。而是对象,不可以直接使用+、-、*、/等 [算术运算符] 直接对其对象进行数学运算,需要使用对象中的方法进行四则运算 。
2.为什么使用?
浮点数处理时可能会发生精度缺失 。当处理金额相关的数字时,一点点精度缺失当数量级大的时候就是很大损失 。
浮点数为什么会发生精度缺失呢?
因为float和都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度 。
注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确,只能无限接近于那个值
什么时候使用?
需要慎重使用!虽然解决了浮点数精度问题,但基本上每步运算都需要创建新的对象,比float和更加的损耗性能 。当处理比较重要和对精度有要求的数据(金额)时使用 。
3.怎么使用?
有如上图所示的构造方法创建对象,而常用的有如下四种:
(int) 创建一个具有参数所指定整数值的对象
() 创建一个具有参数所指定双精度值的对象(不推荐使用)
(long) 创建一个具有参数所指定长整数值的对象
() 创建一个具有参数所指定以字符串表示的数值的对象(推荐使用)
不推荐将浮点数作为形参传入构造函数
//测试浮点数当做形参传入构造函数时精度缺失@Testvoid contextLoads() {BigDecimal bigDecimal = new BigDecimal(0.1);System.out.println("bigDecimal值为: " + bigDecimal);/**控制台输出:bigDecimal值为: 0.1000000000000000055511151231257827021181583404541015625*/

1.String类空间概述

文章插图
如上代码结果所示: 参数类型为的构造方法的结果有一定的不可预知性 。(0.1)它实际上等于0. 。
这是因为0.1无法准确地表示为 (或者说对于该情况,不能表示为任何有限长度的二进制小数) 。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值) 。
推荐使用字符串为形参传入构造函数
(1)类型形参的构造方法是完全可预知的 。比如 new ("0.1") 将创建一个 对象,它正好等于预期的 0.1 。因此,比较而言,通常建议优先使用构造方法 。