标签:用法 精确 mat i++ 类型 而不是 构造 报错 1.5
包装类
1、概述
java是面向对象的语言,但是java中支持的8个基本类型不是面向对象的。他们是以值的形式存在的,而不是对象的形式。在面向对象开发过程中及其不方便。为了将基本类型变成以对象形式存在,java对8个基本类型提供了引用类型。
这8个引用类型称为基本类型的“包装类”
基本类型 包装类
int java.lang.Integer
char java.lang.Character
byte Byte
shor Short
long Long
float Float
double Double
boolean Boolean
包装类带来的好处,除了可以以对象的形式存在参与面向对象开发外,因为对象还
可以含有方法,所以包装类提供了一些对基本类型数据操作的方法。最常用的就是将字
符串转换为基本类型数据。
注意:包装类对字面量的优化(127内,1个字节)
使用常量池的方式缓存字面量,这样在出现重复字面量时,不创建新的对象。
Integer a = Integer.valueOf(1);
Integer b = Integer.valueOf(1);
System.out.println(a == b); //true
Integer a = Integer.valueOf(128);
Integer b = Integer.valueOf(128);
System.out.println(a == b); //false
Float和Double没有进行优化
Double d1=Double.valueOf(1.1);
Double d2=Double.valueOf(1.1);
System.out.println(d1==d2);//false
2、包装类的方法
(1)将字符串转换为基本类型数据
Integer.parseInt( String str );
Double.parseDouble( String str )
(2)Integer提供了可以将数字转化为2进制和16进制并用字符串去描述
Integer.toBinaryString( int i);
Integer.toHexString(int i);
(3)包装类常用的常量
Integer.MAX_VALUE;
Integer.MIN_VALUE;
Double.MAX_VALUE;
(4)int a=65;
System.out.println(a);--->相当于 System.out.println(Integer.toString(a));
3、拆装箱
java1.5后支持了一个新的特性------>自动拆装箱
自动装箱:可以自动的将一个基本类型数据变成其包装类实例
自动装箱的语法现象: Integer a = 1;
或
int i = 1;
Integer a = i;
自动拆箱:可以自动将一个包装类实例转变为一个基本类型数据
语法现象:
Integer i = Integer.valueOf(1);
int a = i;//自动拆箱
手动装箱:Integer c = Integer.valueOf(3);
Integer i = new Integer(1);
手动拆箱:Integer i = Integer.valueOf(1);
int a = i.intValue();
BigDecimal类
java中的double/float在计算时会有舍入误差。要想得到更加精确的结果,可以使用该类。
java.math.BigDecimal
BigDecimal用于计算更精确的小数,同时也可以表示一个很精确的小数。
使用一个BigDecimal实例来表示一个精确的小数,构造方法通常传入一个可以描述该小数的字符串。
该类定义了运算方法 + - * /
add() 用当前浮点数加上另一个浮点数
subtract() 减法
multiply() 乘法
divide() 除法
案例:
BigDecimal num1 = new BigDecimal("3.0");
BigDecimal num2 = new BigDecimal("2.9");
除法要注意,通常我们会使用除法的重载方法
添加舍入模式。(四舍五入)
若不添加这项,那么再遇到两个数相除商为无限小数时,会一致除下去,直到报错。
b1.divide(b2);//报错
BigDecimal b3=b1.divide(b2, 9, BigDecimal.ROUND_HALF_UP);
//表示保留9位有效数字
BigInteger类
java.math.BigInteger用来描述更长位数的整数。
也支持加减乘数,用法和BigDecimal一样
BigInteger的存储范围理论上只受内存容量限制。
案例:
BigInteger num1 = new BigInteger("123");
BigInteger num2 = BigInteger.valueOf(1);
求200的阶乘
BigInteger num = new BigInteger("1");
for(int i = 2;i<=200;i++){
num = num.multiply(BigInteger.valueOf(i));
}
System.out.println(num);
标签:用法 精确 mat i++ 类型 而不是 构造 报错 1.5
原文地址:http://www.cnblogs.com/qin-derella/p/6627981.html