在Java中有一个设计的原则“一切皆对象”,Java中的基本数据类型就完全不符合这种设计思想,因为八种基本数据类型并不是引用数据类型,所以Java中为了解决这样的问题,JDK1.5以后引入了八种基本数据类型的包装类。
八种包装类分为两大类型:
Number:Integer、Short、Long、Double、Float、Byte都是Number的子 类表示是一个数字。
Object:Character、Boolean都是Object的直接子类。
装箱及拆箱操作
将一个基本数据类型转换为包装类,那么这样的操作称为装箱操作。将一个包装类转换为一个基本数据类型,这样的操作称为拆箱操作。
转型操作
在包装类中,可以将一个字符串变为指定的基本数据类型,一般在输入数据时会使用较多。
在Integer类中将String变为int型数据:public static int parseInt(String s)
在Float类中将String变为float型数据:public static float parseFloat(String s)
注意:转型操作时,字符串必须由数字组成,否则会出现错误哦
享元模式(Flyweight Pattern)它使用共享对象,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似对象;它适合用于当大量对象只是重复因而导致无法令人接受的使用大量内存。通常对象中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。
运用共享技术有效的支持大量细粒度的对象。
/**
基本数据类型包装类
*/
public class Test16{
public static void main(String[] args){
//把基本数据类型转换为包装类,称为自动装箱
Integer i1 = new Integer(10);
//把包装类转换为基本数据类型,称为自动拆箱
int i2 = i1.intValue();
Integer i3 = 10; //建议方式
Integer i4 = new Integer("123");
//把数值字符串转换为int类型
String num1 = "12";
int i5 = Integer.parseInt(num1);
int i6 = Integer.valueOf(num1);
//面试题:
Integer x1 = new Integer(10);
Integer x2 = new Integer(10);
System.out.println(x1==x2); //flase
System.out.println(x1.equals(x2)); //true
Integer x3 = new Integer(128);
Integer x4 = new Integer(128);
System.out.println(x3==x4); //flase
System.out.println(x3.equals(x4)); //true
Integer x5 = 10;
Integer x6 = 10;
System.out.println(x5==x6); //true
System.out.println(x5.equals(x6)); //true
Integer x7 = 128;
Integer x8 = 128;
System.out.println(x7==x8); //flase
System.out.println(x7.equals(x8)); //true
}
}
因为jar包里的lang包里的Integer类的IntegerCache方法存的最大数就是128以内的 即最大就一个字节 超过一个字节不缓存了
一个字节以内的数认为是常用的量做一个缓存 即例子中10 缓存下来 即x5 x6使用的是缓存里的同一个10