2018-06-26学习小结 - 对象的引用与传递10

学习

17.7 点拨

  1. 对象引用相等

引用相等:指引用到堆上同一个对象的两个引用是相等的。

如范例 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()。

  1. 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

你可能感兴趣的:(2018-06-26学习小结 - 对象的引用与传递10)