Java - 核心类库一(任务一.常用类的概述和使用)

2022-06-26  本文已影响0人  aven_kang

Java.lang

Object类

类Object是类层次结构的根,每个类都有Object作为超类


截屏2022-04-24 14.32.22.png
重写equals方法
@Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (obj instanceof Student) {
            Student s1 = (Student) obj;
            if (this.id == s1.id) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }

重写equals方法,通常需要重写hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希代码

public class StudentTest {

    public static void main(String[] args) {

        Student s1 = new Student(3,"张飞");
        Student s2 = new Student(3,"里斯");

        Student s3 = s1;

        if (s1.equals(s2)) {
            System.out.println("hahahah");
        }
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());

    }
}
System.out.println(s1.hashCode()); //1523554304
System.out.println(s2.hashCode()); //1175962212

因为我们重写了equals方法,但是hashCode方法并没有跟着一起修改,打印的哈希值是不一样的,我们在创建Student这个对象的时候,id值是一样的,按道理哈希值就应该是一样的,现在不一样的原因是我们没有去重写hashCode这个方法去适配equals这个方法的修改

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

在Student类中添加这个方法,那么打印的哈希值就一样的了

toString

获取调用对象的字符串形式:包名.类名@哈希值的16进制

System.out.println(s1.toString()); //  com.lagou.task12.Student@22

从打印结果来看,其实很多东西是我们不需要的,如果修改优化呢,其实就是重写toString方法

    public String toString() {
        return "Student";
    }

如果我们要比较名字呢,怎么修改

public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (obj instanceof Student) {
            Student s1 = (Student) obj;
            if (this.name.equals(s1.name)) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }

相应hashCode方法的修改

public int hashCode() {
        return this.name.hashCode();
    }

Integer类的概述

java.lang.Integer类内部包装了一个int类型的变量,主要用于实现对int类型的包装并提供int类型到String类之间的转换等方法
Integer的构造方法

        System.out.println(Integer.MAX_VALUE); // 2147483647
        System.out.println(Integer.MIN_VALUE); // -2147483648
        System.out.println("二进制的位数"+ Integer.SIZE); // 二进制的位数32
        System.out.println("所占字节的个数:"+Integer.BYTES); // 所占字节的个数:4
        System.out.println("对应int类型的Class实例"+ Integer.TYPE); //对应int类型的Class实例int
        System.out.println("-------------------------");
        Integer it1 = new Integer(123); // 已过期
        System.out.println("it1 = "+ it1);
        Integer it2 = new Integer("456"); // 已过期
        System.out.println("it2 =" + it2);
        Integer it3 = Integer.valueOf(123);
        Integer it4 = Integer.valueOf("456");
        System.out.println("it3 = "+ it3 + " " +  "it4 = " + it4);
        int ia = it3.intValue();
        System.out.println("获取到的整数数据是" + ia); // ia = 123

从Java5开始增加了自动装箱和自动拆箱的机制,不再需要像上面的代码那样构造方法,可以直接到位

Integer it5 = 100;
int ib = it5;
截屏2022-04-24 17.59.36.png 截屏2022-04-24 18.06.15.png
        int ic = Integer.parseInt("300"); // 300 如果转换失败,会抛出异常
        System.out.println("字符串转整数:" + ic); // 字符串转整数:300
        System.out.println("根据参数指定的整数获取对应的十进制字符串:" + Integer.toString(200));
        System.out.println("根据参数指定的整数获取对应的二进制字符串:" + Integer.toBinaryString(200));
        System.out.println("根据参数指定的整数获取对应的十六进制字符串:" + Integer.toHexString(200));
        System.out.println("根据参数指定的整数获取对应的八进制字符串:" + Integer.toOctalString(200));
字符串转整数:300
根据参数指定的整数获取对应的十进制字符串:200
根据参数指定的整数获取对应的二进制字符串:11001000
根据参数指定的整数获取对应的十六进制字符串:c8
根据参数指定的整数获取对应的八进制字符串:310

Double类

截屏2022-04-24 18.13.58.png
        Double d1 = Double.valueOf(123.9);
        System.out.println(d1.doubleValue()); // 123.9
        System.out.println(Double.parseDouble("123.22")); // 123.22
        System.out.println(d1.isNaN()); // false

Boolean类

截屏2022-04-24 20.53.05.png
        boolean ia = Boolean.parseBoolean("1");
        Boolean ib = Boolean.valueOf(true);
        System.out.println(ib.booleanValue()); // true
        System.out.println(ib); // true
        System.out.println(ia); // false

Character类

截屏2022-04-25 10.44.56.png
        Character c1 = Character.valueOf('a');
        System.out.println(Character.isUpperCase('a')); // false
        System.out.println(Character.isDigit('1')); // true
        System.out.println(c1.charValue());  // a
        System.out.println(Character.toUpperCase('b')); // B
        System.out.println(Character.toLowerCase('A')); // a

包装类(Wrapper)的使用总结

截屏2022-04-25 10.55.26.png

Math类

截屏2022-04-25 10.59.24.png
        System.out.println(Math.max(10,9)); // 10
        System.out.println(Math.min(1,3)); // 1
        System.out.println(Math.abs(-10)); // 10
        System.out.println(Math.pow(2,3)); // 2的3次方 8
        System.out.println(Math.round(10.9)); // 四舍五入 11
        System.out.println(Math.sqrt(10)); // 10的平方根 3.1622776601683795

BigDecimal类

        BigDecimal bd1 = new BigDecimal("5.2");
        BigDecimal bd2 = new BigDecimal("1.3");

        System.out.println("add = " + bd1.add(bd2)); // add = 6.5
        System.out.println("subtract = " + bd1.subtract(bd2)); // subtract = 3.9
        System.out.println("multiply = " + bd1.multiply(bd2)); // multiply = 6.76
        System.out.println("divide = " + bd1.divide(bd2)); // divide = 4

        // 实现精确运算
        System.out.println(0.1+0.2); // 0.30000000000000004
        BigDecimal bd3 = new BigDecimal("0.1");
        BigDecimal bd4 = new BigDecimal("0.2");
        System.out.println(bd3.add(bd4)); // 0.3

        // 注意事项
        BigDecimal bd5 = new BigDecimal("2");
        BigDecimal bd6 = new BigDecimal("0.3"); // 2/0.3 = 6.666666666666
        //System.out.println(bd5.divide(bd6)); // 会抛出异常 Non-terminating decimal expansion; no exact representable decimal result.
        System.out.println(bd5.divide(bd6, RoundingMode.HALF_UP)); // 7 四舍五入了

BigInteger类

截屏2022-04-25 11.24.52.png
        BigInteger t1 = new BigInteger("9999999999");
        BigInteger t2 = new BigInteger("3");
        BigInteger[] arr = t1.divideAndRemainder(t2);// 一次性得到商和余数
        for (int i = 0;i<arr.length;i++) {
            System.out.println(arr[i]);
            // 3333333333
            // 0
        }
        System.out.println(t1.add(t2)); // 10000000002
        System.out.println(t1.subtract(t2)); // 9999999996
        System.out.println(t1.divide(t2)); // 3333333333
        System.out.println(t1.multiply(t2)); // 29999999997
上一篇下一篇

猜你喜欢

热点阅读