包装类的由来
- Java是面向对象的编程语言,主要依靠创建对象来存储和加工数据.
- 但对象的开辟必须占用堆内存的空间,事事对象化反而适得其反,
- 故用基本数据类型来存储最基本的数据,但也必然有对应的引用数据类型,此为包装类
- 以下为对应关系
- 基本数据类型首字母大写即为包装类,Integer和Character除外
-
基本数据类型 | 引用数据类型 |
---|
int | Integer |
char | Character |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
包装类的优点
- 集合类是类似于数组的结构,但长度可变,
- 在实际开发中经常使用,但集合元素只能为对象
- 但集合中填装基本数据类型又是迫切且无法避免的.
- 故通过将基本数据类型进行"装箱"变为包装类,来实现此功能.
- 另一点,包装类提供了基本数据类型无法具有的方法和属性,
- 如Integer.MAX_VALUE和integer.MIN_VALUE来获取int类型的最大值和最小值
包装类的拆箱和装箱
- 拆箱即为包装类转为基本数据类型,装箱即为反推.
- 在JDK5以前,可以通过调用构造方法或调用静态方法来进行拆箱或装箱.这种方式叫做手动拆箱和装箱.
- 下面以最常用的int的Integer包装类来进行说明,其他包装类一概论之.
- 演示,如何装箱
public Integer(int value)
public Integer(String s)
Integer i1 = new Integer(1);
Integer i2 = new Integer("1");
public static Integer valueOf(int i)
public static Integer valueOf(String s)
public static Integer valueOf(String s,int radix)
\\演示,如何装箱
Integer.valueOf(1);
Integer.valueOf("1");
Integer.valueOf("123",8);
Integer.valueOf("123",16);
public int intValue()
i1 = Integer.valueOf(1);
n = i1.intValue();
System.out.println(n);
Integer i1 = 1;
Integer i2 = new Integer(1);
int i3 = i2
包装类的缓冲值
- 以Integer为例
- 装箱时会在堆中占有内存以创建对应对象,为了节约内存,静态方法valueOf()在一定数值范围内,相同数值对应对象地址相同,Integer为[-128,127],
- 超范围外的数值则对应对象地址不同
- 包装类对应缓冲值(float和double为浮点型变量类型,一定范围内的数据可以极其多,故没有)
-
包装类 | 缓冲值 |
---|
Integer,Byte,Short,Long | [-128,127] |
Char | [0,127] |
Boolean | true,false |
float,double | 无 |
- 调用构造方法则没有缓冲值这一概念.
包装类的成员方法
public static String toBinaryString(int i)
public static String toOctalString(int i)
public static String toHexString(int i)
public static int parseInt(String s)
String str1 = Integer.toBinaryString(100);
System.out.println(str1);
String str2 = Integer.toOctalString(100);
System.out.println(str2);
String str3 = Integer.toHexString(100);
System.out.println(str3);
int n = Integer.parseInt("100");
System.out.println(n);
- 注意:除了Character,都有对应的parseXxx,理由也显而易见
最后笔者希望这杯Java满你心意,愿一键三连,感谢支持!!!