包装类
特点:具有类的特点,可以调用相应类的方法
包装类是基于8种基本类型而封装的8个对象的包装类
基本类型 | 包装类型 |
---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
装箱(基本类型转包装类型)
Integer num=10;
Integer num1=new Integer(10);
拆箱(包装类型转基本类型)
int num2=num;//自动类型转换
public class TestWraper {
//基本类型、 包装类型转换 和String
@Test
public void test2() {
//基本《-》String
int i1 = 10;
String s1 = String.valueOf(i1);
int n1 = Integer.parseInt("12");
System.out.println(s1); //10
System.out.println(n1); //12
//“1.23”
double d1 = Double.parseDouble("1.23");
System.out.println(d1);
Integer i2 =100;
System.out.println(i2.toString().length()); //3
}
//基本类型->包装类型转换
@Test
public void test1() {
int i1=10; // 基本类型
Integer in1 = new Integer(i1);
System.out.println(in1); //10
float f1 = 1.23f;
Float fl1 = new Float(f1);
System.out.println(fl1); //1.23
boolean b1 = true;
Boolean bo1 = new Boolean(b1);
System.out.println(bo1); //true
Boolean bo2 = new Boolean("falsesdfsd");
System.out.println(bo2); //false
int n = in1.intValue();
System.out.println(n);
float f = fl1.floatValue();
System.out.println(f);
boolean b = bo1.booleanValue();
System.out.println(b);
jdk1.5
//装箱(基本转包装) / 拆箱(包装转基本) 自动转换
Integer in3 = 10; //装箱
int i3 = in3; //拆箱
}
}
1.装箱和拆箱:
Integer i=10;//装箱:自动根据数值创建Integer对象将基本类型转换成包装器类型
int n=i//拆箱:自动将包装器类型转换成基本数据类型
1.1为什么需要装箱和拆箱?
因为基本数据类型不是对象的情况下,就不能当成一个对象来使用,而基本数据类型
装箱后就可以当做一个对象,来调用Object子类的接口而且基本数据类型是不能作为
形参来使用的,虽然装箱和拆箱会稍微影响效率,但是提供了很多功能
1.2装箱时调用的方法:
装箱时自动调用的是valueOf(***)方法
拆箱时自动调用的是***Value方法(***代表对应的基本数据类型)
1.3 Integer的面试问题
Integer i1=128;
Integer i2=128;
Integer i3=10;
Integer i4=10;
Integer i5=new Integer(100);
Integer i6=new Integer(100);
System.out.println(i1==i2);//false
System.out.println(i3==i4);//true
System.out.println(i5==i6);//false存在对象即是比较地址
如果数值在[-128,127]之间则返回指向IntegerCache.cache中已经存在的对象;否则创建一个新对象
Integer、Sort、Byte、Character、Long这几个类的valueOf方法是类似的
Integer、Sort、Byte、Long包装类的缓存范围[-128,127]
Character包装类缓存范围[0,127]
Double、Float的valueOf方法的实现是类似的,因为值不是离散的是连续的,不能使用缓存保存,所以没有范围