java的引用理解
1.引用含义
存储对象的内存地址
2.java中new 出来的对象都是强引用
原因:强引用提供了最可靠、最可预测的对象生命周期控制
Object obj = new Object(); // 创建对象
obj = null; // 需要手动明确释放对象
3.实例对象的理解
Person p1 = new Person("张三"); // p1实例存储对象地址
Person p2 = p1; // p2实例复制了p1的引用,但是都是指向同一个对象!!!
// 比较实例对象
System.out.println("实例比较: " + (p1 == p2 )); // true
// 创建两个实例
Book book1 = new Book();
Book book2 = new Book();
// 比较实例对象
System.out.println("实例比较: " + (book1 == book2)); // false
4.反射创建对象和new创建的实例对象是一个意思,但是class就只有一个内存地址,所有创建的实例对象的class对象都是一个内存地址,但是每个实例对象对象地址不一样
//实例对象比较
Dog dog = (Dog.class).newInstance(); //java8之前
Dog dog2 = new Dog();
System.out.println("实例比较: " + (dog == dog2 )); // false
//class对象比较
Book book1 = new Book();
Book book2 = new Book();
Class<?> c1 = book1.getClass();
Class<?> c2 = book2.getClass();
Class<?> c3 = Book.class;
System.out.println("Class比较1: " + (c1 == c2)); // true
System.out.println("Class比较2: " + (c1 == c3)); // true