美文网首页
Java - 核心类库一(任务一.常用类的概述和使用)

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

作者: aven_kang | 来源:发表于2022-06-26 12:14 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:Java - 核心类库一(任务一.常用类的概述和使用)

          本文链接:https://www.haomeiwen.com/subject/fejtyrtx.html