Java——包装类
一、概述
Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。
基本数据类型 | 包装类型 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
二、常量池
- 包装类对象的初始值为null(是一个对象)
- Java中除了float和double的其他基本数据类型,都有常量池
- 整数类型:[-128, 127]值在常量池
- 字符类型:[0, 127]对应的字符在常量池
- 布尔类型:true、false在常量池
因为有常量池的存在,所以有下列现象出现
public class IntegerTest { public static void main(String[] args) { Integer num1 = 100; // 可以理解为String类的赋值方式 Integer num2 = new Integer(100); Integer num3 = 100; System.out.println(num1 == num2); // false System.out.println(num1 == num3); // true } }
因为new了之后,会在堆内存中开辟空间,所以先打印false、再打印true。但是常量池有范围是-128到127之间,如下
public class IntegerTest { public static void main(String[] args) { Integer num1 = 1000; // 可以理解为String类的赋值方式 Integer num2 = new Integer(1000); Integer num3 = 1000; System.out.println(num1 == num2); // false System.out.println(num1 == num3); // false } }
超出了范围,打印结果就都为false了。
三、自动装箱和拆箱
- 自动装箱和拆箱是JDK1.5开始的。
- 基本数据数据类型自动转换为包装类型叫做装箱
- 包装类型自动转换为基本数据类型叫做拆箱
public class IntegerTest { public static void main(String[] args) { Integer num1 = 100; // 自动装箱 Integer num2 = num1 + 200; // num1自动拆箱为基本数据类型然后进行计算 } }
分开分析
// 自动装箱 Integer num = 100; // 100是基本数据类型(int类型) // 原始代码:Integer num = Integer.valueof(100)
---
Integer num1 = 100; // 自动装箱 Integer num2 = num1 + 200; // 先自动拆箱、计算完后,再自动装箱 // 拆箱代码:num.iintvalue() // 运算:num.intvalue() + 100 // 装箱:Integer.valueof(num.intvalue() + 100)
四、基本数据类型与字符串的转换
在开发过程中数据在不同平台之间传输都以字符串形式存在的,有些数据表示的数值含义,如果要用于计算我们就需要将其转换为基本数据类型。
4.1、字符串转换为基本数据类型
包装类型除了Character之外,都存在一个静态方法:parseXxxx,如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。
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基本类型
例子
// 必须保证字符串是要即将转换的格式,否则异常 System.out.println(Integer.parseInt("100")); // 100 System.out.println(Boolean.parseBoolean("true")); // true
4.2、基本数据类型转换为字符串
(1)、可以直接在数字后加一个空字符串
int num = 100; String str = num + ""; System.out.println(num); // 100
(2)、通过String类静态方法valueOf()
int num = 100; String str = String.valueOf(num); System.out.println(num); // 100