有时, 需要将 int 这样的基本类型转换为对象。 所有的基本类型都冇一个与之对应的类。
例如,Integer 类对应基本类型 int。通常,这些类称为包装器 ( wrapper ) 这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character 、Void 和 Boolean (前6 个类派生于公共的超类 Number)。对象包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时, 对象包装器类还是 final , 因此不能定义它们的子类。
假设想定义一个整型数组列表。而尖括号中的类型参数不允许是基本类型,也就是说,不允许写成 ArrayList<int>。这里就用到了 Integer 对象包装器类。我们可以声明一个 Integer对象的数组列表。
ArrayList<Integer> list = new ArrayList<>();
幸运的是, 有一个很有用的特性, 从而更加便于添加 int 类型的元素到 ArrayLis<lnteger>中。下面这个调用
list.add(3);
将自动地变换成
list.add (Integer.value0f(3));
这种变换被称为自动装箱(autoboxing)。
要注意:自动装箱规范要求 boolean、byte、char 127, 介于 -128 ~ 127 之间的 short 和int 被包装到固定的对象中。例如,如果在前面的例子中将 a 和 b 初始化为 100,对它们进行比较的结果一定成立。
public static void main(String[] args) throws Exception{
Integer a = 127;
Integer b = 127;
Integer a1 = 128;
Integer b1 = 128;
System.out.println(a == b); //true
System.out.println(a1 == b1); //false
}
最后强调一下,装箱和拆箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时, 插人必要的方法调用。虚拟机只是执行这些字节码。
int intValue( )
以 int 的形式返回 Integer 对象的值(在 Number 类中覆盖了 intValue方法)。
下面是Integer类的常用方法:
static String toString(int i ) | 以一个新 String 对象的形式返回给定数值 i 的十进制表示。 |
static String toString(int i ,int radix ) | 返回数值 i 的基于给定 radix 参数进制的表示。 |
static int parselnt(String s) static int parseInt(String s,int radix) |
返回字符串 s 表示的整型数值, 给定字符串表示的是十进制的整数(第一种方法,) 或者是 radix 参数进制的整数(第二种方法 。) |
static Integer valueOf(String s) Static Integer value Of(String s, int radix) |
返回用 s 表示的整型数值进行初始化后的一个新 Integer 对象, 给定字符串表示的是十 进制的整数(第一种方法,)或者是 radix 参数进制的整数(第二种方法。) |
Number parse(String s) | 返回数字值,假设给定的 String 表示了一个数值。 |
public static void main(String[] args) throws Exception{
Integer a = 127;
int a1 = a.intValue();
System.out.println(a1); //127
int b = 126;
String b1 = Integer.toString(b);
String b2 = Integer.toString(b,16);
System.out.println(b1); //126
System.out.println(b2); //7e
String c = "126";
int c1 = Integer.parseInt(c);
int c2 = Integer.parseInt(c,8);
System.out.println(c1); //126
System.out.println(c2); //86
String d = "127";
Integer d1 = Integer.valueOf(d);
Integer d2 = Integer.valueOf(d);
System.out.println(d1); //127
System.out.println(d2); //127
}