一、常用类:
二、 基本数据类型的包装类
Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。比如:将基本数据类型存储到Object[ ]
数组或集合中的操作等等。
为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。
包装类位于java.lang包
,八种包装类和基本数据类型的对应关系:
在这八个类名中,除了Integer
和Character类
以外,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写而已。
Number类是抽象类,因此它的抽象方法,所有子类都需要提供实现。Number类提供了抽象方法:intValue()
、longValue()
、floatValue()
、doubleValue()
,意味着所有的“数字型”包装类都可以互相转型。
/*
* 包装类的基本用法:
* 1. 把基本数据类型和我们 对象 的互相转化
* 2. 在基本数据类型、包装类对象、、字符串之间提供相互转化
*
* 八种基本数据类型对应八种包装类
*/
public class TestInteger {
public static void main(String[] args) {
Integer i = new Integer(10); // 从Java9 开始被废除
// 将一个数字(数值)转成一个对象, 也就是包装起来
Integer j = Integer.valueOf(50); // 官方推荐使用 -- 将一个数转换度(包装)成对象
// System.out.println(j+i);
int a = j.intValue(); // 把包装类对象转换成基本数字类型
double b = j.doubleValue();
System.out.println(a+" "+b);
// 把字符串转成数字 -- 需要字符串是纯数字字符串才行,否则会报错
// 例如 ("456abc") 会报异常 -- NumberFormatException 【数字格式异常】
Integer m = Integer.valueOf("456");
// Integer n = Integer.valueOf("345abx");// NumberFormatException (数字格式异常)
System.out.println(Integer.MAX_VALUE);
// 基本数据类型 和 对象之间的相互转化
Integer a1 = Integer.valueOf(20);
int a2 = a1.intValue();
// 测试自动装箱和拆箱
Integer x = 100; // 自动装箱--- 编译器: Integer x = Integer.valueOf(100);
int y = x; //自动拆箱 --- 编译器: int y = x.intValue();
// 包装类 -- 空指针异常问题
Integer z = null;
// int zz = z; // 会报空指针异常 编译器:int zz = z.intValue()
// 测试缓存问题
// 自动装箱时,[-128,127]之间的数有缓存,相当于系统已经帮你建好了转换对象,不需要重新去
Integer x1 = 100;
Integer x11 = Integer.valueOf(100); // 自动装箱
Integer x2 = 100;
Integer x3 = 1000;
Integer x4 = 1000;
// == 比较的是内存地址( 变量(栈)中存放的对象的(堆)内存地址)
// 而 equals 方法 比较的还是两对象的内容是否相等
System.out.println(x1 == x2); // true,由于缓存问题
System.out.println(x3 == x4);
System.out.println(x1.equals(x2)); // 比较数值(字符)
System.out.println(x3.equals(x4));
}
}
包装类的用途
对于包装类来说,这些类的用途主要包含两种:
- 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如
Object[ ]
、集合等的操作。 - 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化!)。
三、包装类的使用
public class Test {
/** 测试Integer的用法,其他包装类与Integer类似 */
void testInteger() {
// 基本类型转化成Integer对象
Integer int1 = new Integer(10); //已经被废弃,不推荐使用
Integer int2 = Integer.valueOf(20); // 官方推荐这种写法
// Integer对象转化成int
int a = int1.intValue();
// 字符串转化成Integer对象
Integer int3 = Integer.parseInt("334");
Integer int4 = new Integer("999");
// Integer对象转化成字符串
String str1 = int3.toString();
// 一些常见int类型相关的常量
System.out.println("int能表示的最大整数:" + Integer.MAX_VALUE);
}
public static void main(String[ ] args) {
Test test = new Test();
test.testInteger();
}
}