java 包装类学习

一、什么是包装类
    Java中的8中基本类型并不支持面向对象机制,没有成员变量,方法可以调用。Java为了这一中类型引入了包装类,即把基本数据类型当成类来处理。

二、基本数据类型与包装类对应关系
byte
Byte
short
short
int
Integer
long
Long
char
Character
float
Float
double
Double
boolean
Boolean

三、自动装箱与自动拆箱
    自动装箱就是可以直接把基本数据类型变量直接赋值给包装类变量。
    自动拆箱就是可以直接把包装类变量直接赋值给基本数据类型变量。
    
    例子:
                使用自动拆箱装箱
                       Integer a = 1;//自动装箱
                       int b = a; //自动拆箱
                
                没有使用自动拆箱装箱
                        Integer a = new Integer(1);
                        int b = a.intValue();
    使用自动装箱拆箱可以很方便的对基本类型和包装类类型进行转换。

四、包装类常用的静态方法

        (一)字符串转换成基本类型
                    Xxx.parseXxx(String s)     第一个Xxx代表包装类(Char 除外)
                                                              第二个Xxx代表基本类型
                    
                    例子:
                    String intStr = "123";
                    int a = Integer.parseInt(intStr);//a = 123
                    
                    String floatStr = "45.6f"//f代表float型
                    float b = Float.parseFloat(floatStr);//b = 45.6 

        (二)基本类型转换成字符串
                    String.valueOf(xxx); //xxx为数值
                    
                    例子:
                    
                    String intStr = String.valueOf(78);//inStr = "78";
                    String floatStr = String.valueOf(45.6f);//floatStr = "45.6" 没有f


五、包装类的比较

            (一)包装类与基本数据类型的比较
                    包装类型可以与基本类型直接比较.
                    例子:
                    Integer a = 10;
                    System.out.println("a是否大于6:" + (a > 10));//输出 a是否大于6:true

            (二)包装类与包装类的比较
                    因为包装类是引用类型,如果两个包装类变量直接比较,两个包装类变量所指向的位置相同,
                    结果才会true;

                    情况一、两个包装类变量不全使用自动装箱
                    例如:
                    Integer a = 10;
                    Integer b = new Integer(10);
                    System.out.println(""+(a == b));//结果为false,因为a和b指向对象的位置并不相同。

                    情况二、两个包装类变量全使用自动装箱
                    例如:
                    Integer a = 10;
                    Integer b = 10;
                    System.out.println(""+(a==b));//结果为true

                    Integer c = 128;
                    Integer d = 128;
                    System.out.println(""+(c == d));//结果为false

                    那么问题来了,为什么两个的值为10就相同,为什么值为128的时候就不相同呢?
                       
                        系统会把-128~127之间的每一个数自动装箱成一个Integer实例,放进一个cache缓存当中,
                        每当我们创建-128~127之间的Integer实例的时候,系统就会直接把实例指向cache中对应的实例,
                        所以当我们创建的Integer实例的值在-128~127之间的时候,只要他们的值相同,都会指向同一个
                        位置,他们的指向相同,所以直接比较的结构就相同。

                        如果创建的Integer实例的数值不在这个范围里面,系统每次遇到要创建实例的时候,都会新创建一个
                        实例,所以就算实例的数值相同,他们的指向也不相同,所以直接比较的结果肯定不相同。

                     在比较包装类实例的时候,通常会使用以下方法:
                        1、实例.toCompare(另一个实例); 数值相同为0 大于为1 小于为-1
                        2、包装类.compare(包装类实例1,包装类实例2);数值相同为0 大于为1 小于为-1

                    


转载:http://blog.csdn.net/chihson_gzs/article/details/50516119






猜你喜欢

转载自blog.csdn.net/sinat_24230393/article/details/52397170