基本数据类型的包装类:
- 装箱使用.valueOf()方法,拆箱使用.类型Value()方法。根据接收变量的类型,装箱和拆箱可以是自动的。
- 基本数据类型int可以自动转long,但自动装箱并不会将int包装成Long,自动拆箱也类似,Long对象不能被int接收。
- 对于Integer类型的对象,默认会生成一个Integer[]类型的缓存区,保存-128~127范围的对象。在这个范围内生成的对象的地址是相同的(==);在这个范围之外的对象的地址是不同的(!=)。但是,若调用Integer内重写的equals()方法,则都是相等的。
Object通用方法:
- toString():在打印时默认调用的方法,返回一个字符串。Object的toString()方法会返回一个由“全类名@根据地址生成的哈希码”组合而成的字符串。可以对这个方法进行重写。大部分包装类(字符串、基本数据类型的包装类、集合)都默认重写了这个方法,对对象进行合适地展现。
- getClass():返回对象的类型,即对象是由哪个类创建的。不能被重写。
equals():比较两个对象是否相等。Object的equals()方法会比较对象的地址。可以对这个方法进行重写,通过比较属性等来确定对象是否相等,而不是地址。大部分包装类(字符串、基本数据类型的包装类、集合)都默认重写了这个方法,对对象进行合适地比较。
针对字符串的比较,因为所有的常量(即编译时即确定的)字符串都是运行时常量池中存在的字符串,故通过相同方式生成的相同的字符串的引用拥有相同的地址,故也可以使用==来比较这些字符串。例如:
String a = "aaa"; // 进入运行时常量池
String b = new String("aaa").intern(); // 强制放入运行时常量池
String c = new String("aaa"); // 进入堆区
System.out.println(a == b); // true
System.out.println(a == c); // false
System.out.println(a.equals(c)); // true
对于变量和固定字符串的比较,一般使用”固定”.equals(变量),而不是变量.equals(“固定”),防止变量为null的情况。
- hashCode():Object的hashCode()方法会根据对象在内存中的特征(地址),返回一个哈希值。其值相等,对象不一定相同;其值不等,对象一定不同。可以重写这个方法,返回通过Objects.hash()静态方法来生成对象数据的哈希值,而不是地址的哈希值。
- wait()、notify()、notifyAll():线程同步相关方法。
Objects工具类:
是一个静态方法工具类,能够对对象进行一些操作。