java一共有8中基本数据类型,每一种数据类型就有对应的包装类。
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
-
包装类有什么用?
可以在对象中定义更多的功能方法操作该数据。
-
包装类的常用方法
来看一下其中一个包装类Integer。
Integer 类在对象中包装了一个基本数据类型int的值。
该类还提供了多个方法,能在int类型和String类型之间互相转换,
还提供了处理int类型时非常有用的其他一些常量与方法。
常量:
Integer包装类里面有int范围最大值与最小值
由于是静态,可以直接调用
Integer.MIN_VALUE(最小值)
Integer.MAX_VALUE(最大值)
构造方法:
Integer(int value)
构造一个新分配的 Integer对象,该对象表示指定的 int值。
Integer(String s)
构造一个新分配 Integer对象,表示 int由指示值 String参数。
Integer i1 = new Integer(100); Integer i2 = new Integer("200");
成员方法:
static parseInt
public class Test { public static void main(String[] args){ String i = "100"; int j = Integer.parseInt(i); // 转换类型一般用这个,注意Character没有这个parseXxx方法 System.out.println(j); } }
更多还是看API文档吧。
-
自动装箱与自动拆箱
public static void main(String[] args){ int i = 10; Integer integer = new Integer(i); // 装箱,将基本类型包装成对象,装箱 int j = integer.intValue(); // 拆箱,将对象转换为基本数据类型 Integer integer2 = 100; // 自动装箱,把基本数据类型转换为对象(jdk5新特性) int k = integer + 100; // 自动拆箱,把对象转换为基本数据类型(jdk5新特性) System.out.println(k); }
-
补充一个坑:
自动装箱与自动拆箱有一个坑。
public static void main(String[] args){ { int n1 = 10; int n2 = 10; Integer i1 = new Integer(n1); Integer i2 = new Integer(n2); System.out.println(i1 == i2); System.out.println(i1.equals(i2)); System.out.println("-------------"); } { Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2); System.out.println(i1.equals(i2)); System.out.println("-------------"); } { Integer i1 = 128; Integer i2 = 128; System.out.println(i1 == i2); System.out.println(i1.equals(i2)); System.out.println("-------------"); } }
输出结果是:
false
true
-------------
true
true
-------------
false
true
-------------
为什么127是true,128就是false呢?
-128到127是byte的取值范围,如果在这个范围内,自动装箱不会新创建对象,而是从常量池中获取。如果超过了byte取值范围就会再创建对象。
源码:
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }