> 文章列表 > JavaSE学习进阶day04_03 包装类

JavaSE学习进阶day04_03 包装类

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 + "个");