第五章 包装类(重点)
5.1 概述
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
不知道还记不记得基础班学的集合:
之前说的是集合只能使用引用数据类型,不能使用基本数据类型,现在基本数据类型也有相应的引用。因此也可以使用:
java学习就是这样,由浅入深的学习,知道掌握整个体系的知识。
5.2 Integer类
-
Integer类概述
包装一个对象中的原始类型 int 的值
-
Integer类构造方法及静态方法
方法名 | 说明 |
---|---|
public Integer(int value) | 根据 int 值创建 Integer 对象(过时) |
public Integer(String s) | 根据 String 值创建 Integer 对象(过时) |
public static Integer valueOf(int i) | 返回表示指定的 int 值的 Integer 实例 |
public static Integer valueOf(String s) | 返回保存指定String值的 Integer 对象 |
-
示例代码
public class IntegerDemo { public static void main(String[] args) { //public Integer(int value):根据 int 值创建 Integer 对象(过时) Integer i1 = new Integer(100); System.out.println(i1); //public Integer(String s):根据 String 值创建 Integer 对象(过时) Integer i2 = new Integer("100"); //Integer i2 = new Integer("abc"); //NumberFormatException System.out.println(i2); System.out.println("--------"); //public static Integer valueOf(int i):返回表示指定的 int 值的 Integer 实例 Integer i3 = Integer.valueOf(100); System.out.println(i3); //public static Integer valueOf(String s):返回保存指定String值的Integer对象 Integer i4 = Integer.valueOf("100"); System.out.println(i4); } }
5.3 装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
-
装箱:从基本类型转换为对应的包装类对象。
-
拆箱:从包装类对象转换为对应的基本类型。
用Integer与 int为例:(看懂代码即可)
基本数值---->包装对象
Integer i = new Integer(4);//使用构造函数函数 Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
包装对象---->基本数值
int num = i.intValue();
5.4 自动装箱与自动拆箱
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4); i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; //加法运算完成后,再次装箱,把基本数值转成对象。
5.5 基本类型与字符串之间的转换(重点)
基本类型转换为String(这种转换意义不大)
-
转换方式
-
方式一:直接在数字后加一个空字符串(字符串拼接原理,常用)
-
方式二:通过String类静态方法valueOf() (基本用不到)
-
示例代码
public class IntegerDemo { public static void main(String[] args) { //int --- String int number = 100; //方式1 String s1 = number + ""; System.out.println(s1); //方式2 //public static String valueOf(int i) String s2 = String.valueOf(number); System.out.println(s2); System.out.println("--------"); } }
String转换成基本类型 (这种转换用到的非常多)
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
-
public static byte parseByte(String s)
:将字符串参数转换为对应的byte基本类型。 -
public static short parseShort(String s)
:将字符串参数转换为对应的short基本类型。 -
public static int parseInt(String s)
:将字符串参数转换为对应的int基本类型。 -
public static long parseLong(String s)
:将字符串参数转换为对应的long基本类型。 -
public static float parseFloat(String s)
:将字符串参数转换为对应的float基本类型。 -
public static double parseDouble(String s)
:将字符串参数转换为对应的double基本类型。 -
public static boolean parseBoolean(String s)
:将字符串参数转换为对应的boolean基本类型。
代码使用(仅以Integer类的静态方法parseXxx为例)如:
-
转换方式
-
方式一:先将字符串数字转成Integer,再调用valueOf()方法
-
方式二:通过Integer静态方法parseInt()进行转换(用的多)
-
-
示例代码
public class IntegerDemo { public static void main(String[] args) { //String --- int String s = "100"; //方式1:String --- Integer --- int Integer i = Integer.valueOf(s); //public int intValue() int x = i.intValue(); System.out.println(x); //方式2 //public static int parseInt(String s) int y = Integer.parseInt(s); System.out.println(y); } }
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException
异常。
5.6练习:类型转换
注意:之前学的键盘录入字符串是有bug的
next()键盘录入字符串的时候是遇到空格就自动结束的,而且只要缓冲区有就会默认从缓冲区接收数据。怎么解决呢?用nextLine():
可见nextLine()是遇到回车结束,遇到空格不结束。但是我们反而用它用的不多,通常用的是next()输入字符串,然后把他转换成相应的基本数据类型。如果此时用nextLine()来输入则反而会出错。
需求:
定义一个集合,存5个键盘录入的整数。(键盘录入要求用next方法录入) 并把他们存入到集合中 要求1:求5个数的平均数 要求2:统计这5个数中,有多少个数字比平均大。
代码示例:
//1.创建一个集合 ArrayList<Integer> list = new ArrayList<>(); //2.循环5次并存入集合 Scanner sc = new Scanner(System.in); for (int i = 0; i < 5; i++) { System.out.println("请输入一个整数"); String numberStr = sc.next(); //把字符串变成整数 int number = Integer.parseInt(numberStr); //直接添加 list.add(number);//是在添加数据的时候,进行的装箱 } //4.统计 //思路清晰,一个循环,只做一件事情 int sum = 0; for (int i = 0; i < list.size(); i++) { //先把获取到的数据拆箱,变成基本数据类型,再跟sum进行相加 sum = sum + list.get(i);//+= } //5.求平均数 int avg = sum / list.size(); //6.统计 int count = 0; for (int i = 0; i < list.size(); i++) { if(list.get(i) > avg){ count++; } } //7.打印 System.out.println(count + "个");