8中基本数据类型对应的包装类型
1、java中为8种基本数据类型又对应准备了8种包装类型。8种包装类型属于引用数据类型,父类是Object.
2、思考:为什么要再提供8种包装类型?
8种基本数据类型不够用
public class IntegerTest01 {
public static void main(String[] args) {
//需求:调用doSome()方法的时候需要传一个数字进去
//但是数字属于基本数字类型,而doSome()方法参数的类型是object。
//可见doSome()方法无法接收基本数据类型的数字。可以传一个数字对应的包类进去。
//把100这个数字经过构造方法包装成对象。
MyInt myInt = new MyInt(100);
//doSome()虽然不能直接传数字100,但是可以传一个100对应的包装类型。
doSome(myInt);
}
public static void doSome(Object obj){
//System.out.println(obj);//javase2.integer.MyInt@50cbc42f
System.out.println(obj);//100
}
}
3、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) |
Number是一个抽象类,无法实例化对象
public class IntergerTest02 {
public static void main(String[] args) {
//123这个基本数据类型,进行构造方法的包装,达到了基本数据类型向引用数据类型的转换。
//基本数据类型转换为引用数据类型。(装箱)
Integer i = new Integer(123);
//引用数据类型转换为基本数据类型。(拆箱)
float f = i.floatValue();
System.out.println(f);//123.0
}
}
在JDK1.5之后,支持自动拆箱和装箱
自动装箱:基本数据类型自动转换成包装类
自动拆箱:包装类自动转换成基本数据类型
有了自动拆箱后,Number类中的方法就用不着了
public class IntegerTest03 {
public static void main(String[] args) {
//通过访问包装类的常量,来获取最大值和最小值
System.out.println("int的最大值:"+ Integer.MAX_VALUE);
System.out.println("int的最小值:"+ Integer.MIN_VALUE);
//自动装箱
//int类型自动装换成Integer
Integer x = 100;
//自动拆箱
//Integer自动转换成int类型
int y = x;
Integer z = 1000;//等同于:Integer z = new Integer(1000)
//+两边要求是基本数据类型的数字,z是包装类,不属于基本数据类型,这里会进行自动拆箱,将z转换成基本数据类型.
System.out.println(z+1);
Integer a = 1000;//Integer a = new Integer(1000) a是个引用,保存内存地址指向对象
Integer b = 1000;//Integer b = new Integer(1000) b是个引用,保存内存地址指向对象
//==比较的是对象的内存地址,a和b两个引用中保存的对象内存地址不同
//==这个运算符不会触发自动拆箱机制。(只有+ - * / 等运算的时候才会)
System.out.println(a == b);//false
}
}
public class IntegerTest04 {
public static void main(String[] args) {
Integer a = 128;
Integer b = 128;
System.out.println(a == b);//false
/*
java中为了提高程序的执行效率,将[-128,127]之间所有的包装对象提前创建好,
放到了一个方法区的"整数型常量池"当中了,目的是只要用这个区间的数据就不需要
再new了,直接从整数型常量池当中取出来。
*/
//x变量中保存的对象的内存地址和y变量中保存的对象的内存地址是一样的。
Integer x = 127;
Integer y = 127;
System.out.println(x == y);//true
}
}
4、Integer类中常用方法
public class IntegerTest05 {
public static void main(String[] args) {
//重点方法
//static int parseInt(String s)
int retValue = Integer.parseInt("123");//String-->int
System.out.println(retValue + 100);//223
double retValue2 = Double.parseDouble("3.14");
System.out.println(retValue2 + 1);//4.14
//static String toBinaryString(int i) 静态的:将十进制转换成二进制
String binaryString = Integer.toBinaryString(3);
System.out.println(binaryString);//"11"二进制字符串
//static String toHexString(int i) 静态的:将十进制转换成十六进制
//十六进制:1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a
String hexString = Integer.toHexString(25);
System.out.println(hexString);//"19"十六进制字符串
//static String toOctalString(int i) 静态的:将十进制转换成八进制
String OctalString = Integer.toOctalString(8);
System.out.println(OctalString);//"10"二进制字符串
//valueOf方法
//static Integer valueOf(int i) 静态的:int-->Integer
Integer i1 = Integer.valueOf(100);
System.out.println(i1);
//static Integer valueOf(String s) 静态的:String-->Integer
Integer i2 = Integer.valueOf("100");
System.out.println(i2);
}
}
String-int-Integer互转