相关文章:
- 《常用类 (一) ----- Arrays数组工具类》
- 《常用类 (二) ----- Math类》
- 《常用类 (三) ----- BigDecimal和BigInteger大数类》
- 《常用类 (四) ----- Random随机数类》
- 《常用类 (五) ----- Date日期类和Calender日历类》
- 《常用类 (六) ----- String类与字符串》
- 《常用类 (七) ----- 包装类》
本篇涉及内容
- 包装类概述
- Integer类详解
包装类概述
一、基本概念
包装类在java.lang包下,所有的包装类都属于引用数据类型。
二、基本数据类型对应的包装类型
基本数据类型 | 包装类型 |
---|---|
byte | Byte(父类Number) |
short | Short(父类Number) |
int | Integer(父类Number) |
long | Long(父类Number) |
float | Float(父类Number) |
double | Double(父类Number) |
char | Character(父类Object) |
boolean | Boolean(父类Object) |
三、装箱与拆箱
-
装箱:通过包装类,将基本数据类型转为引用数据类型的过程
-
拆箱:包装类对象调用以下方法,将引用数据类型转为基本数据类型过程
byte byteValue()
double doubleValue()
float floatValue()
int intValue()
long longValue()
short shortValue()// 装箱,基本数据类型--->引用数据类型 int a = 123 Integer i1 = new Integer(a);// 手动装箱 Integer i2 = a;// 自动装箱 // 拆箱,引用数据类型--->基本数据类型 int b1 = i1.intValue();// 手动拆箱 int b2 = i1;// 自动拆箱
详解Integer包装类
一、基本内容
-
字段
MAX_VALUE
,获取当前包装类对应的基本数据类型的最大取值
MIN_VALUE
,获取当前包装类对应的基本数据类型的最小取值 -
构造方法
Integer(int value)
——用int类型值构造
Integer(String s)
——用字符串构造 -
常用方法
以下均为静态方法
返回值 方法名与形参 功能 int parseInt(String s) 将字符串转为int类型 Integer valueOf(int i) 整型转Integer Integer valueOf(String s) 字符串转Integer String toBinaryString(int i) 十进制数转为二进制 String toOctalString(int i) 十进制转为八进制 String toHexString(int i) 十进制转十六进制
二、关于自动装箱和自动拆箱
-
自动装箱
// 等价于Integer i1 = new Integer(1000); Integer i1 = 1000; Integer i2 = 1000; Integer i3 = 2000; // 等价于Integer i4 = new Integer(i1.intValue() + i2.intValue()); Integer i4 = i1 + i2; System.out.println(i1 == i2);// false System.out.println(i3 == i4);// false System.out.println(i4 == 2000);// true
触发条件:
(1) 直接用基本数据类型值给对应包装类赋值。注意:
(1) 包装类的引用之间判等没有自动拆箱,比较的是引用指向的内存地址。
(2) 包装类与基本数据类型之间的判等有自动拆箱。 -
自动拆箱
Integer a = 1000; Integer b = 1000; Integer c = 2000; // 没有自动拆箱,比较的是引用指向的堆区的内存地址 System.out.println(a == b);// false // 包装类型和基本数据类型运算,自动拆箱 System.out.println(a == 1000);// true System.out.println(a < 2000);// true // 包装类与包装类运算,自动拆箱 System.out.println(a < c);// true // 先自动拆箱为基本数据类型,然后基本数据类型与包装类型判等(自动拆箱) System.out.println(a + b == c);// true System.out.println(a + 1000 == c);// true
触发条件:
(1) 用基本数据类型与包装类进行运算,此时包装类会自动拆箱。
(2) 包装类之间进行运算(除==
),此时包装类会自动拆箱。 -
关于整数型常量池
java中为了提高程序的执行效率,将[-128, 127]之间所有包装类对象提前创建好了,放到了方法区的“整数型常量池”中(类比“字符串常量池”),只要使用这个区间的数据,那么包装类的引用不会指向堆区,而是直接指向“整数型常量池”中已存在的数据。Integer a = 128; Integer b = 128; Integer x = 127; Integer y = 127; // 128超过了[-128,127]区间取值,所以创建包装类对象时a,b引用指向的是堆区不同内存地址 System.out.println(a == b);// false // 127在[-128,127]区间内,所以x,y引用指向是方法区的"整数型常量池"中同一个数据的内存地址 System.out.println(x == y);// true