包装类型
每个基本类型都有其对应的包装类型[对象类型]
byte->Byte
short->Short
int->Integer
long->Long
float->Float
double->Double
char->Character
boolean->Boolean
学习掌握目标
- 包装类型的api的常用方法
- 包装类型和基本数据类型以及String类型三者之间的相互转换问题.
Number
api:java.lang包,所有关于上面包装类型[数字]的共同的抽象的父类.
byte
byteValue()
返回指定号码作为值byte
,这可能涉及舍入或截断。abstract double
doubleValue()
返回指定数字的值为double
,可能涉及四舍五入。abstract float
floatValue()
返回指定数字的值为float
,可能涉及四舍五入。abstract int
intValue()
返回指定号码作为值int
,这可能涉及舍入或截断。abstract long
longValue()
返回指定数字的值为long
,可能涉及四舍五入或截断。short
shortValue()
返回指定号码作为值short
,这可能涉及舍入或截断。
提供的这些方法都是关于包装类型转换成对应的基本类型的方法
Integer
构造
Integer(int i);//利用int类型的整数来构建一个Integer对象 - int类型->Integer类型
Integer(String s);//此处的字符串一定是数字形式的字符串 - String类型->Integer类型
如果传入的是一个非数字形式的字符串,那么会抛出java.lang.NumberFormatException数字格式化失败异常
自动解封箱
jdk5.x开始支持的新的功能
- 封箱 - 基本数据类型可以自动转换成对应的包装类型
- 解箱 - 包装类型可以自动转换成对应的基本的数据类型
常用方法
static Integer valueOf(int i);//将int->Integer
[-128,127] -> 比较的结果是true,不在这个范围的是返回false
//如果[-128,127]之间,那么直接返回内部的缓冲数组中的数据 //如果不在这个范围,返回一个新的Integer对象 public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } Integer类内部有一个静态内部类 private static class IntegerCache { static final int low = -128; static final int high; //缓冲区,提供了缓冲的数组,数组在静态代码块中进行预初始化,提前赋值了. static final Integer cache[]; static{ cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); } }
// [-128,127] -> 比较的结果是true,不在这个范围的是返回false //剖析自动封箱 Integer a = 127;//Integer a = Integer.valueOf(127); Integer b = 127; System.out.println(a == b);//true admindeMacBook-Pro:Desktop admin$ javap -c IntegerHello Compiled from "IntegerHello.java" public class IntegerHello { public IntegerHello(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: bipush 127 2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 5: astore_1 6: bipush 127 8: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 11: astore_2 12: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; 15: aload_1 16: invokevirtual #4 // Method java/lang/Integer.intValue:()I 19: bipush 7 21: if_icmpne 28 24: iconst_1 25: goto 29 28: iconst_0 29: invokevirtual #5 // Method java/io/PrintStream.println:(Z)V 32: return }
关于进制转换的方法
2-1. static String toBinaryString(int n);//十进制n转换成对应的二进制
2-2. static String toHexString(int n);//十进制n转换成对应的十六进制
2-3. static String toOctalString(int n);//十进制n转换成对应的八进制
static int parseInt(String s);//将数字形式的字符串转换成int类型,如果传入的是一个非数字形式的字符串,那么会抛出java.lang.NumberFormatException数字格式化失败异常
static Integer valueOf(String s);//String->Integer
总结
包装类型和基本数据类型以及String类型三者之间的相互转换问题.
int->Integer
1. java.lang.Integer的构造Integer(int n) 2. jdk5.0提供的自动封箱Integer a = 10; 3. java.lang.Integer提供的static Integer valueOf(int n);
Integer -> int
1. int intValue();//java.lang.Number提供的抽象方法,java.lang.Integer重写了该方法 2. jdk5.0提供的自动解箱
int->String
1. java.lang.String提供的方法static String valueOf(int n);
String->int
1. java.lang.Integer类static int parseInt(String s);
String->Integer
1. java.lang.Integer的构造Integer(String n) 2. java.lang.Integer的方法static String valueOf(String n);
Integer->String
1. java.lang.Integer的String toString(); 2. java.lang.String中提供了static String valueOf(Object obj);
作业1
笔试题:int和Integer之间的区别
- Integer是int的包装类;int是基本数据类型;
- Integer变量必须实例化后才能使用;int变量不需要;
- Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
- Integer的默认值是null;int的默认值是0。
- 泛型不支持int,但是支持Integer
- int 存储在栈中,Integer 对象的引用存储在栈空间中,对象的数据存储在堆空间中。