35.Java常用类

1.包装类(Wrapper Class)

  • Java并不是纯面向对象的语言,Java是一个面向对象的语言,但是Java的基本数据类型却不是面向对象的!

  • 但是在我们的实际生活使用中,经常需要将基本数据转化为对象,便于操作。

  • 包装类均位于 Java.lang 包中

  • 包装类和基本数据类型的对应关系

    基本数据类型 包装类
    byte Byte
    boolean Boolean
    short Short
    char Character
    int Integer
    float Float
    long Long
    double Double
  • 所有的数字类型基本数据的包装类都继承了一个叫Number的抽象类,所以他们的方法比较相似,这里以Byte为例。

package com.wrapper.demo;

public class demo1 {
    public static void main(String[] args) {

        byte a = 1;
        byte b = 10;
        Byte aByte = new Byte(a);
        Byte bByte = new Byte(b);
        System.out.println(aByte.byteValue());  // 获取byte值
        System.out.println(aByte.toString());  //  变成字符串输出
        System.out.println(aByte.compareTo(b));  // -9 两个Byte做差 x - y
        System.out.println(bByte.compareTo(a));  // 9
        System.out.println(aByte.doubleValue());  // 转为double类型
        System.out.println(aByte.floatValue());   // 转化为float类型
        System.out.println(aByte.equals(1));  // 判断类型和数值是否相等
        System.out.println(aByte.hashCode() == 1);  // 转化为int类型
        System.out.println(aByte.intValue() == 1);  // 转化为int类型 , 效率更高
        System.out.println(aByte.longValue());  // 转化为long类型
        System.out.println(aByte.getClass());  // 获取类

    }

}
  • 此外,每个包装类还有他们各自实现的接口方法

    package com.wrapper.demo;
    
    public class Demo2 {
        public static void main(String[] args) {
    
            System.out.println(Integer.max(2, 3));  // 两个整数比大小
            System.out.println(Integer.MAX_VALUE);  // 最大int
            System.out.println(Integer.MIN_VALUE);  // 最小int
            System.out.println(Integer.toString(1, 10));  //返回String
    
            System.out.println(Integer.toHexString(1000));  // 转换成16进制,并以字符串形式返回
            System.out.println(Integer.parseInt("123"));  // 将字符串转化为数字
        }
    }
    
  • 自动装箱与自动拆箱 (JDK5之后的特性)

    • 自动装箱

      • 基本类型自动的分装到他们的包装类中我们称之为自动装箱
      Integer i = 123;
      
      • 本质上编译器帮我们自动调用了Integer的构造器
    • 自动拆箱

      • 包装类自动转化为基本数据类型数据

        int i = new Integer(123);
        
      • 本质上编译器自动帮我们调用了intValue方法

        int i = new Integer(123).intValue;
        
package com.wrapper.demo;

public class Demo3 {
    public static void main(String[] args) {

        Integer integer = null;
//        int i = integer;  // NullPointerException    integer.intValue()

//        缓存问题
        Integer integer1 = 128;
        Integer integer2 = 128;
        Integer integer3 = 127;
        Integer integer4 = 127;
        System.out.println(integer3.equals(integer4));// true   [-128,127]之间的数任然被当做基本数据类型处理
        System.out.println(integer3 == integer4);// true
        System.out.println("===========================");
        System.out.println(integer1.equals(integer2));  // true   安全的比较
        System.out.println(integer1 == integer2);  // false
        System.out.println("===========================");
        String str = "";
        System.out.println(str.equals(""));   //true
        System.out.println(str == "");        //true  字符串比较时,最好两种都加上


    }
}