基本数据类型对应的8个包装类
基本数据类型对应的8个包装类
为8种基本类型对应提供了8种包装类型,8种包装类型属于引用数据类型,父类是Object
8种基本类型对应的8种包装类型名:
基本数据类型 包装类型名
byte java.lang.Byte(父类是Number)
short java.lang.Short(父类是Number)
int java.lang.Integer(父类是Number)
long java.lang.Long(父类是Number)
float java.lang.Float(父类是Number)
double java.lang.Double(父类是Number)
boolean java.lang.Boolean(父类是Object)
char java.lang.Character(父类是Object)
重点以 java.lang.Integer 为例子学习
研究一下 Number类:Number类是抽象类
含有的方法:
- byteValue() 以byte形式返回指定的数值
- doubleValue() 以double形式返回指定的数值
- floatValue() 以float形式返回指定的数值
- intValue() 以int形式返回指定的数值
- longValue() 以long形式返回指定的数值
- shortValue() 以short形式返回指定的数值
这些方法在所有的数字包装类的子类都有,这些方法是负责拆箱的
拆箱和装箱
public static void main(String[] args) {
// 1.基本数据类型转换为引用数据类型, 称作 装箱
Integer i = new Integer(123);
// 2. 引用数据类型转换为基本数据类型, 称作 拆箱
float f = i.floatValue();
System.out.println(f);//123.0
int s = i.intValue();
System.out.println(s);//123
}
Integer包装类型
public static void main(String[] args) {
// 1.Integer访问常量来获取最值
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
//类比于Integer类,对于常见的Byte包装类
System.out.println(Byte.MAX_VALUE);//127
System.out.println(Byte.MIN_VALUE);//-128
// 2.自动装箱和自动拆箱
Integer x = 100;//自动装箱 此处的x是引用数据,保存对象的内存地址,等同于Integer x = new Integer(100);
int y = x;//自动拆箱
System.out.println(x + 100);//200
//此处 + 处的x不是基本数据类型,自动拆箱
// 3.整数型常量池 “池”cache就是缓存机制,优点就是效率高,但耗费内存
/*java中为了提高程序的执行效率,将-128 到 127 之间的所有的包装对象提前创建好,放到
一个方法区的整数型常量池中,目的是这个区间的数据不需要再new了,直接从整数型常量池中取出来使用*/
//Integer类加载的时候,会初始化整数型常量池:共256个对象
Integer a = 127;
Integer b =127;
System.out.println(a==b);//true
// == 判断的是两个对象的内存地址
}
Integer包装类常用的方法
public static void main(String[] args) {
// 1.不是一个数字,可以包装成Integer类吗?不可以, 出现了数字格式化异常 java.lang.NumberFormatException
//Integer x = new Integer("100");
//Integer s = new Integer("中文");
//编译没有问题,运行时出错,出现了数字格式化异常,字符串改为不是一个数字就报错
// 2.方法1(掌握): static int parseInt(String s) 传参String,返回int
int s = Integer.parseInt("100");
System.out.println(s+100);//200
//类比于其他包装类
double s1 = Double.parseDouble("1.2");
System.out.println(s1+1);//2.2
// 3.了解方法
//static String toBinaryString(int) 将十进制转换为二进制字符串
String binaryString = Integer.toBinaryString(3);
System.out.println(binaryString);//11
// static String toOctalString(int) 将十进制转换为八进制字符串
String octalString = Integer.toOctalString(8);
System.out.println(octalString);//10
//static String toHexString(int) 将十进制转换为十六进制字符串
String hexString = Integer.toHexString(17);
System.out.println(hexString);//11
// 4.了解valueOf方法
//static Integer valueOf(int i) 将 int类型 转换为 Integer类型
//static Integer valueOf(String i) 将String类型 转换为 Integer类型
Integer s1 = Integer.valueOf(11);
Integer s2 = Integer.valueOf("22");
System.out.println(s1);//11
System.out.println(s2);//22
小结:
public static void main(String[] args) {
// 1.int 和 String 之间转换:
//String转换为int: Integer.parseInt(String)
int s1 = Integer.parseInt("100");
System.out.println(s1+1);//101
//int转换为String: 1. 拼接一个空字符串 2. String.valueOf(int)
String s2 = s1+"";
System.out.println(s2+100);//100100
String s3 = String.valueOf(200);
System.out.println(s3+100);//200100
// 2.int 和 Integer 之间转换
//int转换为Integer: 1.自动装箱 2. Integer.valueOf(int)
Integer x = 1000;
Integer y =Integer.valueOf(2000);
//Integer转换为int: 1.自动拆箱
int a = x;
// 3.String 和 Integer 之间转换
//String转换为Integer:Integer.valueOf(String)
Integer s5 = Integer.valueOf("100");
//Integer转换为String:String.valueOf(Integer对象)
String s4 = String.valueOf(x);
}