文章目录
包装类
java中为8种基本数据类型对应准备了8种包装类型。8种包装类型属于引用类型,父类是Object。
重点以java.lang.Integer
为代表学习
1、八种包装类都是什么
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 |
2、Number的共同方法(装箱与拆箱)
八种包装类中其中6个都是数字对应的包装类,他们的父类都是Number
Number是一个抽象类,无法实例化对象。
public class IntegerText {
public static void main(String[] args) {
//100这个基本数据类型,进行构造方法的包装达到了:基本数据类型引用数据类型的转换
//基本数据类型-(转换为)->引用数据类型(装箱)
Integer i = new Integer(100);
Float f = i.floatValue();
System.out.println(f);//输出结果:100.0
//将引用数据类型--(转换为)->基本数据类型(拆箱)
int reValue = i.intValue();
System.out.println(reValue);//输出结果:100
}
}
3、Integer的构造方法
关于Integer类的构造方法,有两个:
- 1.
Integer(int)
- 2.
Integer(String)
public class IntegerText {
public static void main(String[] args) {
//将数字100转换成Integer包装类型(int-->Integer)
Integer x = new Integer(100);
System.out.println(x);
//将String类型的数字,转换成Integer包装类型(String-->Integer)
Integer y = new Integer("123");
System.out.println(y);
}
}
3、Double的构造方法
//double-->Double
Double d = new Double(1.23);
System.out.println(d);
//String-->Double
Double e =new Double(3.14);
System.out.println(e);
4、通过访问包装类的常量,来获取最大、小值
System.out.println("int的最大值" + Integer.MAX_VALUE);
System.out.println("int的最小值" + Integer.MIN_VALUE);
System.out.println("byte的最大值" + Byte.MAX_VALUE);
System.out.println("byte的最小值" + Byte.MIN_VALUE);
运行结果:
5、自动装箱和自动拆箱
自动装箱:基本数据类型自动转换成包装类。
自动插箱:包装类自动转换成基本数据类型
//自动装箱
//100是基本数据类型
//x是包装类型
//基本数据类型-自动转换为->包装类型:自动装箱
Integer x = 100;
//自动拆箱
//x是包装类型
//y是基本数据类型
//包装类型-(自动转换为)->基本数据类型:自动拆箱
int y = x;
Integer z = 1000;
System.out.println(z + 1);
上面的代码为什么没有报错呢?
+两边要求是基本数据类型的数字,z是包装类,不属于基本数据类型,这里会进行自动拆箱。将z转换为基本数据类型
==不会触发自动拆箱机制,只有±*/等运算符才能触发
java中为了提高程序的执行效率,将[-128到127]之间所有的包装对象提前创建好,放到一个方法区的“整数型常量池”当中了,目的是只要用这个区间的数据不需要再new了,直接从整数型常量池中取出来。
public class IntegerText {
public static void main(String[] args) {
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
Integer x = 127;
Integer y= 127;
System.out.println(x == y);
//
}
}
原理::x变量中保存的对象的内存地址和y变量的对象的内存地址是一样的。
6、Integer常用方法
手动装箱:Integer x = new Integer()
手动拆箱:int y = x.intValue( )
Integer i = new Integer("中国人");
运行错误,不是一个数字不能包装成Integer
重点方法:static int parseInt(String s)
,静态方法,传参String,返回int
int reValue = Integer.parseInt("123");//String -转换-> int
System.out.println(reValue + 100);//输出结果为:223
double reValue2 = Double.parseDouble("3.14");
System.out.println(reValue2 + 1);//4.140000000000001(精度问题)
float reValue3 = Float.parseFloat("1.0");
System.out.println(reValue3 +1);
将十进制转换成二进制字符串(静态的):static String toBinaryString(int i)
将十进制转换成十六进制进制字符串(静态的):static String toHexString(int i)
将十进制转换成八进制进制字符串(静态的):static String toOctalString(int i)
7、String、int、Integer类型互换
静态的:int–>Integer
static Integer valueOf(int i)
静态的:String–>Integer
static Integer valueOf(String s)
public class IntegerText {
public static void main(String[] args) {
// String --> int
int i1 = Integer.parseInt( "10"); // 1是100数字
System.out.println(i1 + 1); // 101
// int --> String
String s2 = i1 + ""; // "100"字符串
System. out.println(s2 + 1); // "1001"
// int --> Integer
//自动装箱
Integer x = 1000;
// Integer --> int
//自动拆箱
int y = x;
// String --> Integer
Integer k = Integer.valueOf("123");
// Integer --> String
String e = String.valueOf(k);
}
}
转换速记图: