JavaSE学习进阶day04_03 包装类
第五章 包装类(重点)
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"); //NumberFormatExceptionSystem.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 --- Stringint number = 100;//方式1String 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 --- intString s = "100";//方式1:String --- Integer --- intInteger 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 + "个");