学Java第三十七天-------常用API
一、Math

练习
1、

2、

二、System

1、exit()

2、currentTimeMillils()
返回从1970.1.1.08:00到现在所经历的毫秒数。常用来计算某个程序运行的时间,如下图:

3、arrayCopy



4、小总结

三、Runtime



代码练习:
四、Object
object类是所有类的父类,所有类直接或间接继承Object,所以它的方法,所有类的对象都能调用
object类没有有参构造方法,因为它的所有子类没有共同的成员变量。所以一般的子类构造方法会写Super()无参构造,而不写有参构造。

1、toString(某对象) :
返回该对象的字符串表示形式:包名.类名@地址值
sout(某对象) :输出的也是 : 包名.类名@地址值
两者一样,因为sout的底层逻辑用的是toString(),而且还是某对象调用的toString().
而现在我们想要用sout之后打印的是对象的属性。这时就可以对该对象进行方法重写。重写tostring方法。(用ptg也可以直接实现)


重写student中的tostring方法

2、equals()
对象名.equals(另一个对象名) ------>>>结果比较的是两个对象的地址值,意义不大!而我们现在想比较两个对象的属性值是否相同,就要对该对象所属的类进行equals方法重写,如下图:

方法类测试一下:

相关大厂测试题:

总结:
1、Object 里的 equals() 比较的是两个对象的地址值,只要地址值不同,直接返回false;
StringBuilder类没有重写object的equals方法,所以还是直接比较地址值。
而string类重写了equals方法,改写成:先判断与之比较的对象是不是string类,如果不是,直接返回false。 所以调用equals方法,要先看CTRL+B具体的代码,具体分析。
2、自己创建的类,如果想用equals方法比较属性而不是地址值,就重写。
3、tostring是返回一个对象的地址值,system.out.println()底层代码用到了tostring,所以打印的是地址值
3、clone()
对象克隆:把A对象的属性值完全拷贝给B对象
先写一个User类:

之后再在测试类中克隆:

但是这样的克隆是默认的浅克隆,当u1的值发生改变,u2也会改变。
现在出现了深克隆:
方法一:重写clone方法:

方法二:借用第三方库,第三方api要复制在lib里面

总结:

五、Objects类
Objects.equals(对象A,对象B)

equals方法的底层逻辑:

