概述
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
包装类的方法
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));
拆装箱
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);