Java day9【第十八章】String常用方法

【第十九章】包装类

  包装类的主要功能是针对于基本数据类型的对象转换而实现的,并且随着JDK版本的更新,包装类的功能也在发生改变,有着更多的支持。

一.包装类实现原理分析:

  1.认识包装类:

  Object类最大的特点是所有类的弗雷,并且可以接受所有数据类型,但是在这个过程中存在一个问题:基本数据类型并不是一个类

  所以现在如果要想将基本数据类型以类的形式进行处理,我们就要对其进行包装

范例:以int数据类型为例实现包装处理

class Int{
    private int date;                  //包装一个基本数据类型
    public Int(int date){
        this.date = date;
    }
    public int Intvalue(){
        return this.date;
    }
}

public class SSS {
    public static void main(String [] args){
        Int temp = new Int(10);            //装箱:将基本数据类型保存在包装类中
        int x = temp.Intvalue();            //拆箱:从包装类中获取基本的数据类型
        System.out.println(x * 2);
    }
}

  基本数据类型进行包装处理后可以像对象一样进行引用传递,同时也可以用Object类进行接收,但是如果都已经可以发现基本数据类型与Object类之间的缺陷,那么JDK也早就发现了同样的问题,所以在JDK1.0的时候就提供了包装类的一个概念。

  基本数据类型一共有八种,所以提供有八种包装类,那么这八种包装类的定如下:

  所以现在可以发现,在JAVA中包装类一共提供有俩中类型:

  (1)对象型包装类(Object的直接子类):Boolean、Character;

  (2)数值型的包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double;

  Number是一个抽象类,以后只要是看见了Number都应该明确的表示他是一个数字的概念,这个类定义有如下的方法:

No.

方法名称 类型 应用

1

public byte byteValue() 普通 从包装类中获取byte数据

2

public short shortValue() 普通 从包装类中获取short数据

3

public abstract int intValue() 普通 从包装类中获取int数据 

4

public abstract long longValue() 普通 从包装类中获取long数据

5

public abstract float floatValue() 普通 从包装类中获取float数据

6

public abstract double doubleValue() 普通 从包装类中获取double数据

  Number类中的方法就是直接提供有获取包装类中基本数据类型的方法,一共定义有6个方法(很重要)

二.装箱与拆箱:

  基础数据类型的包装类都是为了基本数据类型转为对象提供的,这样对于基本类型与包装之间就有了如下的操作关系:

  1.数据装箱:将基本数据类型保存到包装类之中,一般通过构造方法完成:

  2.数据拆箱:从包装类中获取基本数据类型:

    |- 数值型包装类:已经由Number类定义了拆箱的方法了

    |- Boolean型:public boolean booleanValue();

范例:以int和Integer为例:

  

public class SSS {
    public static void main(String [] args){
        Integer obj = new Integer(10);    //装箱
        int x = obj.intValue();            //拆箱
        System.out.println(x*2);
    }
}

  Integer是int数据类型的包装类

范例:以double和Double为例:

public class SSS {
    public static void main(String [] args){
        Double obj = new Double(10.1);    //装箱
        double x = obj.doubleValue();            //拆箱
        System.out.println(x*2);
    }
}

  从JDK1.9之后,对包装类提供的构造方法加上了@Deprecated过期处理,不建议用户继续使用,这是因为在JDK1.5之后,为了方便使用,提供了自动装箱与拆箱的操作,所以这种手工的模式基本上没人用了。

范例:观察自动装箱和拆箱

public class SSS {
    public static void main(String [] args){
        Integer obj = 10;     //自动装箱
        int num = obj;        //自动拆箱
        obj ++;               //包装类可以直接进行数学运算
        System.out.println(num * obj);
        
    }
}

  除了提供有这种自动的数学运算支持之外,使用自动装箱的最大好处是可以实现Object接受基本数据类型的操作

范例:Object接收小数:

public class SSS {
    public static void main(String [] args){
        Object obj = 16.2;           //double自动装箱为Double,然后向上转型为Object
        double num = (Double)obj;      //向下转型后再自动拆箱
        System.out.println(num*2);
        
    }
}

  但是对于包装类需要注意一些问题了,关于相等判断上:

范例:观察相等判断

public class SSS {
    public static void main(String [] args){
        Integer x = 99;
        Integer y = 99;
        System.out.println(x == y);        //true    
    }
}
public class SSS {
    public static void main(String [] args){
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);        //false  
  
     System.out.println(x.equals(y)); //true
    }
 }

  以后进行包装类相等判断的时候一定要是用equals()方法完成,而包装类本身也需要考虑占位的长度,如果超过了一位的内容,就需要使用equals()比较。

猜你喜欢

转载自www.cnblogs.com/xiwenxinaini/p/11717065.html