一:概述
1:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
2:常用的操作之一:用于基本数据类型与字符串之间的转换。
3:基本类型和包装类的对应
Byte,Short,Integer,Long,Float,Double
Character,Boolean
二:Integer
1: Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包 含一个 int 类型的字段。此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。
2:构造方法摘要
Integer(int value)
构造一个新分配的 Integer 对象,它表示指定的 int 值。
Integer(String s)
构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。 (注意:这个字符串必须是数字组成的)
3:成员方法
public int intValue()//String – int
public static int parseInt(String s)//String — int 主要是这个方法
public static String toString(int i)
public static Integer valueOf(int i)
public static Integer valueOf(String s)
案例1:
int类型和String类型的相互转换
int – String
String – int(都只能是数字字符串转换到int类型)
//将int类型值转换为String类型的方法,推荐使用String.valueOf(int),是String类中的静态方法,可以转换任意类型的值
//将String转换为int类型
public class IntegerDemo {
public static void main(String[] args) {
//int -- String
//方式一
int number = 666;
String s1 = "" + number;
System.out.println("s1:" + s1);
//方式二
String s2 = String.valueOf(number);
System.out.println("s2:" + s2);
//方式三
//int -- Integer -- String
Integer i = new Integer(number);
String s3 = i.toString();
System.out.println("s3:" + s3);
//方式四
String s4 = Integer.toString(number);
System.out.println("s4:" + s4);
//String -- int
String s = "100";
//方式一
//String --Integer -- int
Integer ii = new Integer(s);
//public int intvalue();
int x = ii.intValue();
System.out.println("x:" + x);
//方式二,Integer静态方法
//public static int parseInt(String s);
int y = Integer.parseInt(s);
System.out.println("y:" + y);
}
}
案例2:自动装箱拆箱功能
/*JDK5的新特性,自动装箱拆箱功能
* 自动装箱:把基本类型转换为包装类类型
* 自动拆箱:把包装类类型转换为基本类型
* 注意:Integer ii = null;是错误的,会造成空指针异常
* */
public class IntegerDemo1 {
public static void main(String[] args) {
//Integer i = new Integer(100);
Integer ii = 100;
ii += 100;
System.out.println("ii:" + ii);
/*通过反编译后的代码
* Integer ii = Integer.valueOf(100);//自动装箱
* ii = Integer.valueOf(ii.intValue()) + 100);//自动拆箱,再自动装箱
* System.out.println(new StringBuild("ii:")).append(ii).toString());
*
*/
//Integer iii = null;//java.lang.NullPointerException空指针异常
//iii += 100;
//System.out.println("ii:" + iii);
}
}
案例3:面试题,针对Integer直接赋值的深度分析
/*
* 看程序写结果:
*
* 注意:Integer的数据直接赋值,如果在-128——127之间,会直接从缓冲区里获取数据,如果不是,则创建新Integer对象
*/
//面试题
public class IntegerDemo2 {
public static void main(String[] args) {
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);
System.out.println(i1.equals(i2));
System.out.println("------------");
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4);
System.out.println(i3.equals(i4));
System.out.println("------------");
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);
System.out.println(i5.equals(i6));
System.out.println("------------");
Integer i7 = 127;
//Integer i7 = Integer.valueOf(127);自动装箱
/* public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
如果是Integer直接赋值, 通过查看源码,针对-128——127的之间的数据,做一个数据缓冲池,如果数据是该范围的内的,每次并不创建新的空间
*/
Integer i8 = 127;
System.out.println(i7 == i8);
System.out.println(i7.equals(i8));
System.out.println("------------");
}
}