包装类
java中的包装类提供了将原始数据类型转换为对象,以及将对象转换为原始数据类型的机制。
java.lang包的八个类在java中称为包装类。八个包装类的列表如下:
基本数据类型 | 包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
为什么需要包装类?
将原始类型和包装类分开以保持简单是一个明智的做法。当需要一个适合像面向对象编程的类型时就需要包装类。当希望数据类型变得简单时就使用原始类型。
采用基本数据类型包装的形式描述,让功能变得更加健壮,例如: Integer默认不是int的 0 而是 null ,那么比起基本数据类型,包装类对象它就多了一个状态。
还有一个比较直观的,就是包装类给我们提供了很多方法可以使用,例如:数据可以转二进制,查看最大值最小值等等。
除了上面还有一个要点: 集合中不能存放基本数据类型,只能存放对象,所以当使用集合时,我们的就需要使用到包装类对象。
包装类和基础类型相互转换(装箱拆箱)
在JDK1.5以后,基础类型和包装类可以自动转换,称为自动装箱和拆箱。
//自动装箱
Integer total = 99;
//自定拆箱
int totalprim = total;
自动装箱就是自动将基本数据类型转换为包装器类型;自动拆箱就是自动将包装器类型转换为基本数据类型。自动装箱和拆箱都是在编译阶段就完成的。自动装箱的时候,java编译器会默认调用valueOf进行装箱,拆箱时会调用**Value方法。
例如:
//基本数据类型和包装类型
int a1=5;
Integer a2=new Integer(5);
System.out.println(a1);
System.out.println(a2);
//装箱
Integer a3=new Integer(a1);
Integer a4=Integer.valueOf(a1);
//拆箱
int a5=a3.intValue();
//自动装箱与自动拆箱
//自动装箱
Integer a6=a1;
//自动拆箱
int a7=a3;
基本数据类型和字符串的相互转换
包装类中“==”与equals的用法比较
值得注意的是,包装类中的equals方法和String类一样,都是重写了Object类中的equals方法,因此比较的是内容而不是地址,而“= =”比较的依然是引用变量的地址,只是当包装类型和与之相对应的基本类型进行 “= =”比较时会先做自动拆箱处理。
所有包装类都可以将与之对应的基本数据类型作为参数来创建它们的实例对象
除了Character类之外,其他包装类都可以将一个字符串作为参数来构造它们的实例
Boolean类的构造方法参数为String类型时,若该字符串为true(不论大小写),则该对象表示true,否则表示false
当包装类Number构造方法的参数为String类型时,字符串不能为null,并且该字符串必须能够解析为基本类型的数据
集合不允许存放基本数据类型,故常用包装类 包含了每种基本数据类型的相关属性,如最大值、最小值、所占位数等
作为基本数据类型对应的类型,提供了一系列实用的对象操作,如类型转换、进制转换等方法
基本类型->字符串(String)
//Integer类 转化为字符串
public static void main(String[] args) {
Integer a=10;
String b=a.toString();
System.out.println(b+1);
//输出 101 ,原因10转换成“10”, “10”+1 会将数组1转化成String类型形成字符串拼接
String c=Integer.toString(a);
System.out.println(c+1);
String d=a+"";
System.out.println(d+1);
}
- String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
- String.valueOf(char c) : 将 char 变量 c 转换成字符串
- String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
- String.valueOf(char[] data, int offset, int count) : 将char数组data中由data[offset]开始取 count个元素转换成字符串
- String.valueOf(double d) : 将 double 变量 d 转换成字符串
- String.valueOf(float f) : 将 float 变量 f 转换成字符串
- String.valueOf(int i) : 将 int 变量 i 转换成字符串
- String.valueOf(long l) : 将 long 变量 l 转换成字符串
- String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString()
字符串(String)->基本类型
//字符串(String)->基本类型
int n = Integer.parseInt("123");
double h = Double.parseDouble("3.14");
System.out.println(n);
System.out.println(h);
System.out.println("-------");
int n1 = Integer.parseInt("8D3FE", 16);
System.out.println(n1);
使用包装类的静态方法parseXX( “字符串”)
Integer类: static int parseInt(String s)
Double类:static double parseDouble(String s)
要将 String 转换成基本数据类型大多需要使用基本数据型态的包装类别,比如说 String 转换成 byte
可以使用 Byte.parseByte(String s)这一类的方法如果无法将 s 分析 则会丢出 NumberFormatException
- byte : Byte.parseByte(String s) : 将 s 转换成 byte Byte.parseByte(String s, int radix) : 以 radix 为基底 将 s 转换为 byte
- double : Double.parseDouble(String s) : 将 s 转换成 double
- float : Float…parseFloat(String s) : 将 s 转换成 float
- int : Integer.parseInt(String s) : 将 s 转换成 int
- long : Long.parseLong(String s) :将 s 转换成 long