ApiDay002_02 Object中的包装类

1.Object:对象/东西

  • 是所有类的鼻祖,所有类都直接或间接继承了Object, 万物皆对象,为了多态

  • Objec中有几个经常被派生类重写的方法:toString()和equals();

  • 调用toString()时,默认返回:类的全称@地址,没有参考意义,所以常常重写toString(返回具体数据

  • 调用equals()时,默认比较的还是==(即比较地址),没有参考意义,所以常常重写equals()来比较具体的属化

注意:

    //说明:java的类都重写了equals()了
    //--像String、StringBuilder已经重写比较内容
    //--我们自己重写的类必须自己重写equals()

2.派生类重写equals()的基本规则:

  • 两个对象必须是同一个类型,若类型不同则返口false

  • 若参数对象为null,则返回false

  • 原则上两个对象要比较对象的属性是否是相同

3.包装类:

  • java定义了8个包装类,目的就是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的方式--其实给8种基本类型套了个壳
  • 其中数字类型的包装类都是继承自java.lang.Number,而char和boolean的包装类直接继承自Object
  • (特殊:1. int的包装类:Integer;char的包装类:Character;)、(Byte、Short、Float、Double)

包装类

java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的形式存在.

  • 其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object
  • Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型.
package integer;

public class IntegerDemo1 {
    public static void main(String[] args) {
        //基本类型转换为包装类
        int i = 123;
        //java推荐我们使用包装类的静态方法valueOf将基本类型转换为包装类,而不是直接new
        Integer i1 = Integer.valueOf(i);//Integer会重用-128-127之间的整数对象
        Integer i2 = Integer.valueOf(i);
        System.out.println(i1==i2);//true
        System.out.println(i1.equals(i2));//true

        double dou = 123.123;
        Double dou1 = Double.valueOf(dou);//Double则是直接new
        Double dou2 = Double.valueOf(dou);
        System.out.println(dou1==dou2);//false
        System.out.println(dou1.equals(dou2));//true

        //包装类转换为基本类型
        int in = i1.intValue();//获取包装类对象中表示的基本类型值
        double doub = i1.doubleValue();
        System.out.println(in);//123
        System.out.println(doub);//123.0

        in = dou1.intValue();//大类型转小类型可能存在丢精度!
        doub = dou1.doubleValue();
        System.out.println(in);//123
        System.out.println(doub);//123.123
    }
}
包装类常用功能
package integer;

public class IntegerDemo2 {
    public static void main(String[] args) {
        //1可以通过包装类获取其表示的基本类型的取值范围
        //获取int的最大值和最小值?
        int imax = Integer.MAX_VALUE;
        System.out.println(imax);
        int imin = Integer.MIN_VALUE;
        System.out.println(imin);

        long lmax = Long.MAX_VALUE;
        System.out.println(lmax);
        long lmin = Long.MIN_VALUE;
        System.out.println(lmin);

        /*
            2字符串转换为基本类型的前提是该字符串正确描述了基本类型可以保存的值,否则
            会抛出异常:NumberFormatException
         */
        String str = "123";
//        String str = "123.123";//这个字符串不能解析为int值!
        int d = Integer.parseInt(str);
        System.out.println(d);//123
        double dou = Double.parseDouble(str);
        System.out.println(dou);//123.123
    }
}
自动拆装箱特性

JDK5之后推出了一个新的特性:自动拆装箱

该特性是编译器认可的.当编译器编译源代码时发现有基本类型和引用类型相互赋值使用时会自动补充代码来完成他们的转换工作,这个过程称为自动拆装箱.

package integer;

public class IntegerDemo3 {
    public static void main(String[] args) {
        /*
            触发自动拆箱特性,编译器会补充代码将包装类转换为基本类型,下面的代码会变为:
            int i = new Integer(123).intValue();
         */
        int i = new Integer(123);
        /*
            触发编译器自动装箱特性,代码会被编译器改为:
            Integer in = Integer.valueOf(123);
         */
        Integer in = 123;
    }
}

posted @ 2022-03-23 15:50  Y_Zoran  阅读(41)  评论(0)    收藏  举报
-->