基本类型包装类及自动装箱拆箱

时间:2021-02-02 19:26:57

基本类型包装类

A:为什么会有基本类型包装类
* 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
B:常用操作
* 常用的操作之一:用于基本数据类型与字符串之间的转换。
C:基本类型和包装类的对应 
byte Byte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean


Integer

构造方法
Integer(int value) 
          构造一个新分配的 Integer 对象,它表示指定的 int 值。 
Integer(String s) 
          构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。 

字段摘要 
static int MAX_VALUE 
     public static final int MAX_VALUE值为 231-1 的常量,它表示 int 类型能够表示的最大值。 
static int MIN_VALUE 
          值为 -231 的常量,它表示 int 类型能够表示的最小值。 
static int SIZE 
          用来以二进制补码形式表示 int 值的比特位数。 
static Class<Integer> TYPE 
          表示基本类型 int 的 Class 实例。 

static String toBinaryString(int i) 
          以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 
static String toOctalString(int i) 
          以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 
static String toHexString(int i) 
          以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 
 

String和 int的转换 

A:int -- String
* a:和""进行拼接
* b:public static String valueOf(int i)
* c:int -- Integer -- String(Integer类的toString方法())
* d:public static String toString(int i)(Integer类的静态方法)
B:String -- int
* a:String -- Integer -- int
* public static int parseInt(String s)
基本数据类型包装类有八种,其中七种都有parseXxx的方法,可以将这七种的字符串表现形式转换成基本数据类型
char的包装类Character中没有pareseXxx的方法




JDK5的新特性自动装箱和拆箱

A:JDK5的新特性
* 自动装箱:把基本类型转换为包装类类型
* 自动拆箱:把包装类类型转换为基本类型
B:案例演示
* JDK5的新特性自动装箱和拆箱
jdk5之前手动装箱,拆箱
 int x = 100;
 Integer i1 = new Integer(x);//将基本数据类型包装成对象,装箱 
 int y = i1.intValue();//将对象转换为基本数据类型,拆箱
自动装箱和拆箱
 Integer i2 = 100;//自动装箱,把基本数据类型转换成对象
 int z = i2 + 200;//自动拆箱,把对象转换为基本数据类型
 System.out.println(z);
注意: Integer i3 = null;
int a = i3 + 100;//底层用i3调用intValue,但是i3是null,null调用方法就会出现
System.out.println(a);//空指针异常java.lang.NullPointerException
建议先判断是否为null,然后再使用。




Integer的面试题



public boolean equals(Object obj)
比较此对象与指定对象。当且仅当参数不为 null,
并且是一个与该对象包含相同 int 值的 Integer 对象时,
结果为 true。 


看程序写结果


Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2);//false
System.out.println(i1.equals(i2)); //true
System.out.println("-----------");


Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);//false
System.out.println(i3.equals(i4));//true
System.out.println("-----------");


Integer i5 = 127;
Integer i6 = 127;
System.out.println(i5 == i6);//true
System.out.println(i5.equals(i6));//true
System.out.println("-----------");


Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8);//false
System.out.println(i7.equals(i8));//true


-128到127是byte的取值范围,
如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取
如果超过了byte取值范围就会再新创建对象


自动装箱底层要调用此方法
public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)//i>= -128 && i <= 127
        return IntegerCache.cache[i + (-IntegerCache.low)];//常量池数组共有255个数
    return new Integer(i);


public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Integer.toBinaryString(60));//111100
System.out.println(Integer.toOctalString(60));//74
System.out.println(Integer.toHexString(60));//3c

Integer i0 = new Integer(100);
System.out.println(i0);

//Integer i1 = new Integer("abc");//java.lang.NumberFormatException数字格式异常
//System.out.println(i1);//因为abc不是数字字符串,所以转换会报错

Integer i2 = new Integer("100");
System.out.println(i2);

System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);

//int ----> String int转换成String
int i = 100;
String s1 = i + "";//推荐用
String s2 = String.valueOf(i);//推荐用

Integer i3 = new Integer(i);
String s3 = i3.toString();

String s4 = Integer.toString(i);

//String----> int String 转换int
String s = "200";
Integer i4 = new Integer(s);
int i5 = i4.intValue();//将Integer转换成了int数

int i6= Integer.parseInt(s);//将String转换为int,推荐用这种

String s5 = "true";
boolean b = Boolean.parseBoolean(s5);
System.out.println(b);

String s6 = "abc";
//char c = Character.P
//char的包装类Character中没有pareseXxx的方法
//字符串到字符的转换通过toCharArray()就可以把字符串转换为字符数组
}

}