* 总结
* 1.对象比较一定是某一个类自己定义的功能
* 2.对象比较时一定要判断是否为null,地址是否相同,属性是否相同。
*
*
*
* 如果有两个数字要判定是否相等,可以使用“==”如果是字符串使用equals()
* 如果自定义的类,要想判断它的两个对象是否相等,那么必须必须类对象
* 对象=数据集合进行比较要使用比较的所有属性
*/
class Book{
private String title;
private double price;
public Book(String title,double price) {
this.title =title;
this.price = price;
}
//本类接收本类对象,对象可以直接访问属性,不需要使用getter了
//两个功能:带回了需要比较的信息,方便访问
public boolean compare(Book book) {
if(book==null) {
return false; //没有必要进行具体的比较
}
//执行“b1.compare(b2)”代码时会有两个对象
//当前对象this(调用方法对象,就是b1引用)
//传递的对象book(引用传递,就是b2引用)
if(this==book) { //内存地址相同
//避免进行具体细节的比较,节约时间
return true;
}
if(this.title.equals(book.title)&&this.price==book.price) {
return true;}
else {
return false;
}
}
public String getTitle() {
return this.title;
}
public double getPrice() {
return this.price;
}
}
public class duixiangbijiao {
public static void main(String[] args) {
Book b1= new Book("JAVA开发",79.2);
Book b2=new Book("JAVA开发",79.2);
if(b1.getTitle()==b2.getTitle()&&b1.getPrice()==b2.getPrice()) {
System.out.println("是同一个对象");
}else {
System.out.println("不是同一个对象");
}
}
/*
* 主方法main()就是一个客户端, 客户端的程序逻辑越简单也好,最好隐藏所有的细节
* 如果要进行信息比较,那么所有的具体的比较细节必须由每个对象自己完成比较的方法
* 暂时定义compare()
*/
}
额外讲解,
如果说现在一个类中的属性使用了private封装了,那么在类的外部不能够通过对象直接调用属性。
但是如果说将一个对象传递回到类的方法里面,那么就相当于取消了封装的形式,可以直接通过对象访问属性
class Info{
private String msg ="Hello";
public void print() {
System.out.println("msg = "+msg);
}
//本类接收本类对象,对象可以直接访问属性,不需要使用getter了
//两个功能:带回了需要比较的信息,方便访问
public void fun(Info temp) {
//在类的内部直接利用对象访问私有属性
temp.msg = "修改内容";
}
}
public class Demo {
public static void main(String[] args) {
Info x= new Info();
x.fun(x);//没有什么意义,只是一个语法验证
x.print();
}
此类形式的代码会在对象比较中出现,但是也是一种常见形式,即:一个类可以接受本类对象。