包装类概述
- 用于将基本类型数据(内存中保存的是数据)当做引用类型看待。
- Java语音的8中基本类型分别对应了8中“包装类”,每一种包装类都封装了一个对应的基本类型成员变量,同时还提供了一些针对该数据类型的实用方法。
包装类 | 对应的基本类型 |
---|---|
java.lang.Integer | int |
java.lang.Long | long |
java.lang.Double | double |
java.lang.Character | char |
java.lang.Boolean | boolean |
java.lang.Byte | byte |
java.lang.Float | float |
java.lang.Short | short |
/**
* 八大基本数据类型的包装类
*/
public class ElementaryDataType {
//八大基本数据类型默认值
byte bt;//0
short s;//0
int i;//0
long l;//0
float f;//0.0f
double d;//0.0d
char c;//\u0000(无符号0字符)
boolean b;//false
Integer integer;//其余引用类型初始值为null
public static void main(String[] args) {
int i = 1;//基本类型,不是Object子类!
//在java里面,整数默认类型是整型(int),而小数的默认类型是双精度浮点型(double);
float f = 1.2f;//表示一个float类型要在后面加f,否则小数默认表示的是double,需要强转才能赋值给float
/**
* 实例化一个对象,该对象代表整数1
* Integer的作用是让基本数据类型int作为一个引用类型看待。
* 这样就可以参与到面向对象的编程方式了。
* 由此我们可以将一个int当做一个Object去看待了。
* 这种从基本类型转变为引用类型的过程称之为“装箱”。反之叫“拆箱”。
* 在java的jdk1.5后会进行自动的拆装箱
*/
Integer integer = new Integer(1);
//拆箱方法
int a = integer.intValue();
Double d = new Double(2.2);//装箱
d = Double.valueOf(2.2);//装箱
double b=d.doubleValue();//拆箱
//自动装箱
d = 2.2;
//自动拆箱
b = d;
//包装类的一些常用功能
/*
* 包装类可以将描述该类型数据的字符串转换为对应的数据类型
*/
String numStr= "123";
/*
* 包装类都可以将字符串转换为其类型
* 方法是:parseXXX XXX代表其类型
* 这里要特别注意!一定要保证待转换的字符串描述的确实是
* 或者兼容要转换的数据类型!否则会抛异常。
*/
int num = Integer.parseInt(numStr);
long longNum = Long.parseLong(numStr);
double doubleNum = Double.parseDouble(numStr);
System.out.println(num+longNum+doubleNum);//369.0
/*
* Integer为我们提供了几个有趣的方法
* 将一个整数转换为2进制形式并以字符串返回
* * 将一个整数转换为16进制的形式并以字符串返回
*/
String bStr = Integer.toBinaryString(num);//转换为2进制
String hStr = Integer.toHexString(num);//转换为16进制
System.out.println(bStr);//1111011
System.out.println(hStr);//7b
/*
* 所有包装类具有几个共通的常量
*/
int max = Integer.MAX_VALUE;//获取int最大值
int min = Integer.MIN_VALUE;//获取int最小值
double dMax = Double.MAX_VALUE;
double dMin = Double.MIN_VALUE;
System.out.println(max);//2147483647
System.out.println(min);//-2147483648
System.out.println(dMax);//1.7976931348623157E308
System.out.println(dMin);//4.9E-324
}
}
BigDecimal类
表示精度更高的浮点型
import java.math.BigDecimal;
/**
* BigDecimal类
* 该类可以进行更高精度的浮点运算
*/
public class BigDecimalTest {
public static void main(String[] args) {
/*
* 创建一个BigDecimal实例,可以使用构造方法
* BigDecimal(String numberFormatString)
* 用字符串描述一个浮点数作为参数传入(理论上字符串可以无限长,可以不丢表示高精度浮点型数据)
*/
BigDecimal num1 = new BigDecimal("3.0");
BigDecimal num2 = new BigDecimal("2.9");
/**
* BigDecimal可以做加减乘除等运算
* add:加法
* multiply:乘法
* 这里要注意除法(除不尽的时候):
* 所以,对于除法而言,,我们要制定取舍模式,
* 否则会一直计算下去,直到内存溢出报错。
*/
BigDecimal result = num1.subtract(num2);//num1-num2
System.out.println(result);//0.1
//保留给定精度位数后四舍五入
result = num1.divide(num2,8,BigDecimal.ROUND_HALF_UP);
System.out.println(result);//1.03448276
/**
* 这里需要注意,BigDecimal可以描述比Double还要高的精度
* 所有在转换为基本类型时,可能会丢失精度!
*/
int i = result.intValue();
System.out.println(i);//0
float f = result.floatValue();
System.out.println(f);//0.1
}
}
BigInteger类
可以保存更长位数的整数
import java.math.BigInteger;
/**
* BigInteger类
* 该类可以保存更长位数的整数
* 理论上:BigInteger存放的整数只受内存容量影响,有容乃大。
*/
public class BigIntegerTest {
public static void main(String[] args) {
/**
* BigInteger同样支持使用描述更长位数的整数的字符串来
* 创建BigInteger
*/
BigInteger num = new BigInteger("1");
/**
* 这种方式我们可以将一个整数的基本类型转换为BigInteger的实例
*/
num = BigInteger.valueOf(1);
/**
* BigIntegert同样支持加减乘除方法
* 200的阶乘
*/
for (int i = 1; i < 200; i++) {
num = num.multiply(BigInteger.valueOf(i));
}
System.out.println(num);//3943289336823952517761816069660925311475679888435866316473712666221797249817016714601521420059923119520886060694598194151288213951213185525309633124764149655567314286353816586186984944719612228107258321201270166459320656137141474266387621212037869516201606287027897843301130159520851620311758504293980894611113948118519486873600000000000000000000000000000000000000000000000
}
}
网友评论