一、包装类概述 点击此处返回总目录 二、Integer类的构造方法
三、Integer类常用方法 四、自动装箱和自动拆箱 五、一道关于自动装箱和自动拆箱的面试题 一、包装类概述 前面讲过,Java有8种基本数据类型。但是基本类型功能不够,希望做一些功能的扩充。java把8种基本类型封装成了对象。而对象就可以调方法了。
字节型 |
短整型 |
整 型 |
长整型 |
字符型 |
布尔型 |
浮点型 |
浮点型 |
byte |
short |
int |
long |
char |
boolean |
float |
double |
Byte |
Short |
Integer |
Long |
Character |
Boolean |
Float |
Double |
上表是8种基本类型,及其对应的包装类。比如,Byte是byte的包装类,Byte里面封装了一个基本类型byte,同时提供更多的方法操作数据。在整个的包装类当中,我们主攻Integer,其他类型99%都是一样的。 基本类型包装最大的应用特点:可以在基本数据类型和字符串之间做转换。 二、Integer类的构造方法 1. public Integer(String s) //将数字格式的字符串,传递到Integer的构造方法中。创建Integer对象,Integer对象中包装的是字符串。 //这个操作只是把s放到了Integer的构造方法当中,不能进行数学运算。要将构造方法中的字符串转化为基 //本数据类型,还需要调用非静态方法intValue()转化成int值。 例1:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { Integer i = new Integer("123"); //这个操作只是把"123"放到了Integer的构造方法当中,不能进行数学运算。 int a =i.intValue(); //要将构造方法中的字符串转化为基本数据类型,还需要调用费静态的方法intValue() System.out.println(a-1); //122 } } |
三、Integer类常用的方法和静态成员变量 静态成员变量: 1. public static final int MAX_VALUE //值为 2^31-1 的常量,它表示 int 类型能够表示的最大值。【例6】 2. public static final int MIN_VALUE //值为 -2^31 的常量,它表示 int 类型能够表示的最小值。【例6】 方法: 1. public static int parseInt(String s) //将字符串转化为基本数据类型int。【例1】 2. public static int parseInt(String s, int radix) //使用radix作为参数,将s转为int。即把s作为radix进制数转化为10进制的int。【例2】 3. public static String toString(int i) //如何将一个int数据转换成String类型?【例4】。更简单的方法:【例3】 4. public static String toString(int i, int radix) //将i转成radix进制。【例5】 5. public int intValue() //以int类型返回该Integer的值。【二、例1】 6. public static String toBinaryString(int i) //十进制转二进制。将十进制的i转化成二进制的字符串。【例7】 7. public static String toOctalString(int i) //十进制转8进制。【例8】 8. public static String toHexString(int i) //十进制转16进制。【例9】 例1:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { int a = Integer.parseInt("-222"); System.out.println(a+1); //-221 } } |
例2:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { int a = Integer.parseInt("110",2); System.out.println(a); //6 } } |
例3:如何将int数据转变成String类型数据?
package cn.itcast.demo01; public class Test { public static void main(String[] args) { int a = 3; String s = a+""; //这样就把int转变成了字符串。连接空串即可。任何类型只要加上""就变成了String类型。 System.out.println(s+1); //31.说明s是字符串。 } } |
例4:将int转换成String类型。
package cn.itcast.demo01; public class Test { public static void main(String[] args) { int a = 3; String str = Integer.toString(a); System.out.println(str+1); //31 } } |
例5:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { String str = Integer.toString(4,2); //把4转化为2进制数。 System.out.println(str); //100 } } |
例6:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { System.out.println(Integer.MAX_VALUE); //2147483647 System.out.println(Integer.MIN_VALUE); //-2147483648 } } |
例7:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { String str = Integer.toBinaryString(4); System.out.println(str); //100 } } |
例8:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { String str = Integer.toOctalString(10); System.out.println(str); //12 } } |
例9:
package cn.itcast.demo01; public class Test { public static void main(String[] args) { String str = Integer.toHexString(10); System.out.println(str); //a } } |
四、自动装箱和自动拆箱 这是JDK1.5之后出现的特性,叫自动装箱和自动拆箱。自动就是不需要你来参与,但是需要知道是怎么回事。 自动装箱是指:基本数据类型,直接变成对象。 自动拆箱是指:把对象中的数据,变成基本数据类型。【例1】 自动装箱和自动拆箱的好处:可以直接将基本类型和引用类型计算。但是,自动装箱和自动拆箱也有弊端:可能出现空指针异常。【例2】 例1:自动装箱和自动拆箱。
package cn.itcast.demo01; public class Test { public static void main(String[] args) { Integer in = 1; //引用变量in一定是指向一个对象,而1是一个基本数据类型,不是个对象。这条语句本来是不对 的,但是程序并没有报错。这就是因为自动装箱,将基本数据类型变成了对象。所以这句话,本 质上是:Integer in = new Integer(1); in = in +1; //in是个对象,对象怎么可以与1进行运算呢?这个本来是不对的,但是因为自动拆箱,将对象首先 变成基本数据类型1,然后再计算。相当于:in.intValue()+1。结果为2。然后又自动装箱:in = new Integer(2)。 System.out.println(in); //1。Integer类重写了Object类的toString()方法。 } } |
例2:自动装箱和自动拆箱的弊端:引用型变量为空的问题。
package cn.itcast.demo01; public class Test { public static void main(String[] args) { Integer in = null; //in = in+1; //报错。in为null。拆箱时,null.intValue()失败。报空指针异常。 } } |
五、自动装箱和自动拆箱的面试题 很坑人的题目。
package cn.itcast.demo02; public class Test { public static void main(String[] args) { Integer i1 = new Integer(1); Integer i2 = new Integer(1); System.out.println(i1 == i2); //false。"=="两边如果是引用数据类型,就是比较地址。 System.out.println(i1.equals(i2)); //true。说明重写了Object的equal()方法。比较的是数据。 //数据在byte范围内,JVM不会new新对象。超过byte,会重新new。 Integer a = 500; //相当于:Integer a = new Integer(500); Integer b = 500; //500>127,不在byte范围内,会new新的对象。所以这句话相当于:Integer b = new Integer(500); System.out.println(a==b); //false。a与b是两个新的对象,所以地址不同。 System.out.println(a.equals(b)); //true。 Integer aa = 50; //相当于:Integer aa = new Integer(50); Integer bb = 50; //发现50<=127,在byte范围内,不new新对象。相当于:Integer bb = aa; System.out.println(aa==bb); //true。所以 aa和bb是同一个对象。 System.out.println(aa.equals(bb)); //true。 } } |
|