一、基本类型包装类
概述:在Java的数据类型中,存在八大基本数据类型,基本类型是属于简单的类型,这些类型的变量是没有属性和方法的,仅仅是用于表示一个数值而已,不具备操作这个数据的属性和方法。这是非对象的开发方式,针对这些类型Java都配备了相应的复合引用类型,既可以表示出数值,也可以操作这个数值。
基本类型包装类的作用
- 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
- 常用的操作之一:用于基本数据类型与字符串之间的转换
基本类型对应的包装类
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
在基本类型对应的包装类的层次中,又具备如下的这个层级结构:
Byte、Short、Integer、Long、Float、Double,它们有一个共同的父类java.lang.Number(抽象类)
源码部分:
public final class Byte extends Number
public final class Integer extends Number
public final class Double extends Number
…
二、包装类的API
2.1、包装类的各种构造方法
/**
* 包装类的各种构造方法
*/
private static void m1() {
// 所有的包装类都支持,使用对应的基本类型的数值来进行创建:
// 第一批构造,使用对应的基本类型的值来进行对象的创建(全部支持)
int x = 1;
Integer a = new Integer(x);
Character b = new Character('a');
// 可以通过字符串的形式来创建出包装类的对象(字符除外,其余都支持)
// 第二批:使用字符串来创建引用类型的对象(Charater不支持,其余的全部支持)
Integer c = new Integer("123");
System.out.println(c);
Boolean d = new Boolean("true");
System.out.println(d);
}
提示:
采用字符串表示一个long型值时,不能给字符串的末尾处加L或l。同时使用字符串表示的数据格式有误,那么将出现数字格式转换异常。
2.2、各种包装类型转换为各种基本类型的操作
/**
* 各种包装类型转换为各种基本类型的操作
*/
private static void m2() {
// Number下的每一个子类(Byte、Short、Integer、Long、Float、Double都有如下的这些方法,可以实现由包装类型转换为基本类型的方法)
Integer x = new Integer("10");
byte a = x.byteValue();
short e = x.shortValue();
int b = x.intValue();
long f = x.longValue();
float c = x.floatValue();
double d = x.doubleValue();
}
备注!
这些操作都是在Number父类中给我们已经定义好了的;
2.3、将字符串转换为基本类型(Character除外): parseXXX()
/**
* 将字符串转换为基本类型(Character除外)
*/
private static void m3() {
// 各种方法最终得到的结果是一个基本类型
int value1 = Integer.parseInt("12");
System.out.println(value1);
// 注意!这里是不能使用L 或者 l的;
// long value3 = Long.parseLong("12L");
long value3 = Long.parseLong("12");
System.out.println(value3);
// 针对小数是可以使用F或者 f的;
float value2 = Float.parseFloat("1.2F");
System.out.println(value2);
}
2.4、将字符串转换成包装类(Character除外)
/**
* 将字符串转换为包装类(Character除外)
*/
private static void m4() {
// 各种方法得到的结果是一个引用类型(包装类)
Integer value1 = Integer.valueOf("12");
System.out.println(value1);
// 字符串中也是不能带有L或者 l的标识;
/* Long value2 = Long.valueOf("12L");
System.out.println(value2);*/
Float value3 = Float.valueOf("1.2F");
System.out.println(value3);
}
2.5、Integer与Long包装类进行进制的转换(仅仅针对整数)
/**
* 针对Integer 和 Long存在进制的转换
*/
private static void m5() {
// 将十进制转换为二进制
String binary = Integer.toBinaryString(10);
System.out.println(binary); // 1010
String oct = Integer.toOctalString(10);
System.out.println(oct); // 12
String hex = Integer.toHexString(10);
System.out.println(hex); // a
}
2.6、Float与Double包装类中针对NaN 和 Infinite的判断
double result1 = 10.0/0; // Infinite
double result2 = -10.0/0; // -Infinite
double result = result1+result2; // NaN
//如果指定的数是一个非数字 (NaN) 值,则返回 true,否则返回 false。
public static boolean isNaN(float v /double v)
//如果参数是正无穷大或负无穷大,则返回 true;否则返回 false。
public boolean isInfinite(float v / double v)
2.7、Character包装类中针对字符的处理方法
/**
* Character包装类中针对字符的处理方法
*/
private static void m6() {
System.out.println("大小写的改变");
char value1 = Character.toLowerCase('A');
System.out.println(value1);
System.out.println("判断大小写");
boolean is = Character.isLowerCase(value1);
System.out.println(is);
System.out.println("判断是否是一个字母");
// 字母表示的就是A-Z或 a-z的所有的字母
boolean isLetter = Character.isLetter('A');
System.out.println(isLetter);
}
注意!
针对这些包装类,其实还有很多的方法,大家可以在API手册中进行查阅,做到基本性的了解和熟悉,便于以后在开发中用到,最起码我们可以进行查询;
2.8、int和String类型的相互转换
int转换为String
- 方式一:直接在数字后加一个空字符串
- 方式二:通过String类静态方法valueOf()
/**
* int转换为String
* - 方式一:直接在数字后加一个空字符串
* - 方式二:通过String类静态方法valueOf()
*/
private static void m7() {
// 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转换为int
- 方式一:先将字符串数字转成Integer,再调用valueOf()方法
- 方式二:通过Integer静态方法parseInt()进行转换
/**
* String转换为int
* <p>
* - 方式一:先将字符串数字转成Integer,再调用valueOf()方法
* - 方式二:通过Integer静态方法parseInt()进行转换
*/
private static void m8() {
// 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);
}
2.9、代码汇总
package com.demo.demo02;
/**
* @Author: 史小创
* @Time: 2024/8/1 下午3:18
* @Description: 包装类的各种构造方法
*/
public class Demo01 {
public static void main(String[] args) {
m1();
}
/**
* String转换为int
* <p>
* - 方式一:先将字符串数字转成Integer,再调用valueOf()方法
* - 方式二:通过Integer静态方法parseInt()进行转换
*/
private static void m8() {
// 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);
}
/**
* int转换为String
* - 方式一:直接在数字后加一个空字符串
* - 方式二:通过String类静态方法valueOf()
*/
private static void m7() {
// 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("--------");
}
/**
* Character包装类中针对字符的处理方法
*/
private static void m6() {
System.out.println("大小写的改变");
char value1 = Character.toLowerCase('A');
System.out.println(value1);
System.out.println("判断大小写");
boolean is = Character.isLowerCase(value1);
System.out.println(is);
System.out.println("判断是否是一个字母");
// 字母表示的就是A-Z或 a-z的所有的字母
boolean isLetter = Character.isLetter('A');
System.out.println(isLetter);
}
/**
* 针对Integer 和 Long存在进制的转换
*/
private static void m5() {
// 将十进制转换为二进制
String binary = Integer.toBinaryString(10);
System.out.println(binary); // 1010
String oct = Integer.toOctalString(10);
System.out.println(oct); // 12
String hex = Integer.toHexString(10);
System.out.println(hex); // a
}
/**
* 将字符串转换为包装类(Character除外)
*/
private static void m4() {
// 各种方法得到的结果是一个引用类型(包装类)
Integer value1 = Integer.valueOf("12");
System.out.println(value1);
// 字符串中也是不能带有L或者 l的标识;
/* Long value2 = Long.valueOf("12L");
System.out.println(value2);*/
Float value3 = Float.valueOf("1.2F");
System.out.println(value3);
}
/**
* 将字符串转换为基本类型(Character除外)
*/
private static void m3() {
// 各种方法最终得到的结果是一个基本类型
int value1 = Integer.parseInt("12");
System.out.println(value1);
// 注意!这里是不能使用L 或者 l的;
// long value3 = Long.parseLong("12L");
long value3 = Long.parseLong("12");
System.out.println(value3);
// 针对小数是可以使用F或者 f的;
float value2 = Float.parseFloat("1.2F");
System.out.println(value2);
}
/**
* 各种包装类型转换为各种基本类型的操作
*/
private static void m2() {
// Number下的每一个子类(Byte、Short、Integer、Long、Float、Double都有如下的这些方法,可以实现由包装类型转换为基本类型的方法)
Integer x = new Integer("10");
byte a = x.byteValue();
short e = x.shortValue();
int b = x.intValue();
long f = x.longValue();
float c = x.floatValue();
double d = x.doubleValue();
}
/**
* 包装类的各种构造方法
*/
private static void m1() {
// 所有的包装类都支持,使用对应的基本类型的数值来进行创建:
// 第一批构造,使用对应的基本类型的值来进行对象的创建(全部支持)
int x = 1;
Integer a = new Integer(x);
Character b = new Character('a');
// 可以通过字符串的形式来创建出包装类的对象(字符除外,其余都支持)
// 第二批:使用字符串来创建引用类型的对象(Charater不支持,其余的全部支持)
Integer c = new Integer("123");
System.out.println(c);
Boolean d = new Boolean("true");
System.out.println(d);
}
}
三、自动拆箱和自动装箱
自动装箱
- 把基本数据类型转换为对应的包装类类型
自动拆箱
-
把包装类类型转换为对应的基本数据类型
-
示例代码
Integer i = 100; // 自动装箱 i += 200; // i = i + 200; i + 200 自动拆箱;i = i + 200; 是自动装箱
提示!
拆箱过程:就是将包装类型 【转换】 为对应的基本类型的过程;
装箱过程:就是将基本类型 【包装】 成对应的复合引用类型的过程;
在JDK1.5之后,自动会进行处理。