Java为8中基本数据类型对应准备了8中包装类型。包装类属于引用数据类型,父类是Object。
当有一个方法,它的参数是Object,当想在这个方法中传进去一个数字是无法直接传进去的,这时候就需要传一个数字对应的包装类进去。
- 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是一个抽象类,无法实例化对象。
里面有方法intValue,floatValue…
- Integer i=new Interger(12);这个是吧基本数据类型转换为引用数据类型。叫做装箱。
- float f=i.floatValue();这个是吧引用数据类型转换为基本数据类型中的float类型。叫做拆箱。
Interger这个类是将基本数据类型转换成引用数据类型,而且这个类中的构造方法重写了。平常输出引用的话是一串地址,但是Interger类重写了toString方法,导致输出引用后是数字。不管里面是字符串还是数字,最后都转换成了int类型。double类型也是一样的。
当Interger中的参数是一个字符的时候,虽然编译不会出现异常,但是运行的时候会出现NumberFormatException异常。
Interger类,Byte类,Double类中都有一个常量,就是最大值和最小值,直接通过类名.常量名的方法调用输出。MAX_VALUE,MIN_VALUE。
Interger中的parseInt静态方法:传参String,返回int。字符123转换成int类型的123。也有parseFloat,parseDouble。
将来在使用某些东西的时候,要求你输入某个数字,那其实是字符串,并不是int类型的数据,但是在数据库中需要int类型的数据。
在jdk1.5之后支持自动拆箱和装箱了。
有了自动拆箱之后,Number中的方法就用不着了。
Interger x=100;100自动转换成包装类型。
加号两边是基本数据类型的数字,x是包装类,但是自动拆包,将x自动转换成基本数据类型。所以可以x+1,输出结果就是101。
但是自动拆箱机制在遇到==不会自动拆箱,比较的还是内存地址,只有遇到±*/这种运算符才会自动拆箱。
Java中为了提高程序的效率,将-128到127之间所有的包装对象提前创好,放到一个方法区的整数型常量池中,目的是只要用这个区间 的数据不需要再new了,而是这个引用直接指向方法区中的整形常量池中的那个数的内存地址,直接从常量中取出来。所以当Interger x=127,和Interger y=127,所以x和y的内存地址空间是相同的,所以他们比较时相等。“= =”永远指向的是对象的内存地址。
int–>String:
- int i=100;String s=i+"";:字符串拼接。
- int i=100;String s=String.valueOf(i);:String类中的方法。
String–>int:
- int i=Interger.parseInt(“100”);
int–>Interger:自动装箱;
- Interger x=100;
Interger–>int:自动拆箱;
- int y=x(上面那个x);
String–>Interger:
- Interger k=Interger.valueOf(“100”);
Interger–>String:
- String e=String.valueOf(Interger对象k);



