Object

任何一个类的直接或间接子类
一个类即使不显式继承Object,也还是会继承Object
当然,下面会介绍一下常见的方法。需要重写的时候不要真的自己重写,应该用idea生成。。。

equals

判断两个对象是否相等的方法。
默认判断地址相等,也可以自己重写。重写equals也要重写hashcode,因为两个对象equal必须hashcode也相同,所以为了保证不出问题hashcode也要重写。

public boolean equals(Object obj) {
    if (obj == null)    return false;
    if (this == obj)    return true;
    if (! obj instanceof xxx)
        return false;
    //重点是上面
    xxx obj2 = (xxx) obj;
    return obj2.func() == this.func(); //随便写的逻辑
}

hashcode与重写hashcode

最简单的做法是把判断用的逻辑返回。
觉得太简单可以加点固定的无意义偏移量。

toString()

默认返回包名.类名@哈希码的16进制值

包装类

就是为了让基本类型也能变成对象。

Integer

大概记住 Integer.valueOf Integer.intValue Integer.toString Integer.toBinaryString即可。
Integer内部提供了自动装箱池,-128到127之间的数已经默认装箱了。程序员使用的时候直接返回已有的。

Double

APi和Integer基本是一样的。没有装箱池的概念。

Boolean

用的很少。最起码我很少用。API和Integer类也基本相同。

Character

有些API和Integer类的API是一样的。然而还有一些方法是独有的,比如isDigit这种。
常用于在线刷OJ。

BigDecimal

没有误差的浮点类型,用于精确运算。
当然,说没有误差主要是因为 如果运算的结果不能精确表示,则直接抛出异常。。。(可以通过指定舍入模式规避异常,但四舍五入了可能就不叫精确运算了吧?)

BigInteger

和BigDecimal差不多,其实原理比较简单,我们可以自己实现一个简单的版本。
当然Java的这个做的肯定比普通程序员自己开发的好,最起码乘法是FFT打底的。

String

不可继承的类,从Java1.9以后用byte数组而不是char数组。这样可以节省空间。
在Java中有常量池的概念,第一次遇到的字符串会扔到常量池里。
String是不可变的。
常用的API有很多,我觉得掌握这些API的方法就是去刷OJ。这里还是列举一下 比如 indexOf trim subString contains 等等

初始化

通常应该直接用字面量初始化。调用构造函数一般是用数组来构造。
如果用new String(String str);的方法初始化,会在堆区创建一个str的副本。根据str在或不在常量池中,会创建1-2个对象。

连接优化

如果两个常量用+拼接,编译器会自动把两个常量优化成一个。
如果常量和变量之间用+拼接,则会优化成StringBuilder拼接。

单独说一下compareTo

这东西的顺序总容易记反。其实就是两个str的ASCII值相减。调用方法的str1 - 实际参数str2

正则表达式

这部分内容在网上有很多单独的教程。
在日常开发过程中,通常不需要自己写正则,搜一下一般都能解决需求。
或者直接写死字符即可。比如按空格分隔,直接split(" ");这是因为字符串本身也是一种这则表达式