包装类

概述


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);

 

posted on 2017-03-27 17:57  芹derella  阅读(128)  评论(0编辑  收藏  举报