- Object类
class Address { String detail; public Address(String detail) { this.detail = detail; } } class User implements Cloneable { int age; Address address; public User(int age) { this.age = age; address = new Address("Shanghai"); } public User clone() throws CloneNotSupportedException{ return (User)super.clone(); } } public class CloneTest { public static void main(String[] args) throws Exception { User u1 = new User(29); User u2 = u1.clone(); System.out.println(u1 == u2); System.out.println(u1.address == u2.address); } }
Object类的clone只是浅复制,不会对引用类型的Field值所引用的对象进行克隆,如果需要进行深复制,需要自己进行递归克隆。
- Objects类
是一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是空指针安全的。
import java.util.Objects; public class ObjectsTest { static ObjectsTest obj; public static void main(String[] args) { System.out.println(Objects.hashCode(obj)); System.out.println(Objects.toString(obj));
// 要求obj不能为null,如果为null,抛出空指针异常
// 主要用来对方法形参进行输入校验
System.out.println(Objects.requireNonNull(obj, "obj cannot be null")); } }
- String/StringBuffer/StringBuilder
StringBuffer是线程安全的,StringBuilder没有实现线程安全,所以性能高。
- Math类
完成复杂运算的工具类。
- ThreadLocalRandom和Random
Random用于生成伪随机数
ThreadLocalRandom类是Random的增强版,在并发访问的环境下,使用ThreadLocalRandom来代替Random可以减少多线程资源竞争。
ThreadLocalRandom和Random都比Math的random方法提供了更多的方式来生成各种伪随机数,浮点类型的,整型的,还可以指定生成随机数的范围。
- BigDecimal类
创建BigDecimal对象时,不要直接使用double浮点数作为参数来调用BigDecimal的构造器,否则会发生精度丢失的问题。