学习
17.7 点拨
- 对象引用相等
引用相等:指引用到堆上同一个对象的两个引用是相等的。
如范例 17-5
Book bookA = new Book();
Book bookB = bookA;
bookA.title = "Java程序设计";
bookB.title = "Java Web开发";
若调用:
if (bookA == bookB) {
System.out.println(true);
} else {
System.out.println(false);
}
结果为true。
若调用:
if (bookA.equals(bookB)) {
System.out.println(true);
} else {
System.out.println(false);
}
结果为true。
对象bookA和bookB指向同一堆内存,内存地址及内容一致,结果都为true。以上都只是判断了引用相等。
Book bookA = new Book();
Book bookB = new Book();
bookA.title = "Java程序设计";
bookB.title = "Java Web开发";
bookA.price = 60.0;
bookB.price = 60.0;
if (bookA == bookB) {
System.out.println(true);
} else {
System.out.println(false);
}
if (bookA.equals(bookB)) {
System.out.println(true);
} else {
System.out.println(false);
}
对象bookA和bookB是两个对立对象,堆内存不同,结果都为false。若要判断内容相同,需要覆写equals()。
- Java的垃圾回收机制
范例 17-14 java垃圾回收机制
package com.Javastudy2;
/**
* @author YangWang
* @date 2018年6月26日 下午11:37:50
* @Description TODO java垃圾回收机制
*/
public class P454_17_14 {
public static void main(String[] args) {
Book13 bookA = new Book13();
Book13 bookB = new Book13();
bookA.title = "Java程序设计";
bookB.title = "Java Web开发";
bookA.price = 39.8;
bookB.price = 59.6;
bookB = bookA; // 引用传递
bookB.title = "Android 开发";
bookA.printInfo(); // 此处方法使用对象调用,不是直接调用
}
}
class Book13 {
String title;
double price;
public void printInfo() {
System.out.println("title:" + this.title);
System.out.println("price:" + this.price);
}
}
运行结果:
小结
比较内容相等还是得覆写equals()。
记于2018年6月26日23:13:13
By Yvan