一、== 和 equals 区别
==
== 是运算符;
判读左右两端的数据是否一致, 比较基本数据类型比较的是值,比较引用数据类型比较的是地址值 ;
默认判断的是两个对象的内存地址是否一致,一般用在基本数据类型上
equals
equals 是object类提供的一个方法,用来判断两个对象是否相等
Object中的equals用的是== (地址值),重写之后的equals方法一般比较内容
Object中的equals长这样:
public boolean equals(Object obj) { return (this == obj);
}
字符串String也重写了equals方法,判断两个字符串的内容是否一致
可以通过重写equals方法,不让它只是比较地址值/或者内容,比如也可以比较两个类的某一个属性,比如猫的花色,例子如下:
public class Cats {String name;String color;public Cats(String name, String color) {this.name = name;this.color = color;}public boolean equals(Cats c){if(this.color == c.color){//单纯的自己去写判断的逻辑return true;}elsereturn false;}public static void main(String[] args) {Cats c1 = new Cats("小花","红色");Cats c2 = new Cats("小花","红色");// System.out.println(c1 == c2);//false 默认判断的是两个对象的内存地址是否一致,一般用在基本数据类型上// System.out.println(c1.equals(c2));//false 默认调用的是object提供的equals方法//object中的equals长这样://public boolean equals(Object obj) {// return (this == obj);// }System.out.println(c1.equals(c2));//得到的是true,此时调用的是子类中的equals方法}
}
二、关于equals顺序
如果用type.equals(Chrome) 可能会空指针错误
因为type是string 引用数据类型,就有可能会传null进来
所以如果是null.equals(Chrome)会报空指针;
反之,如果是"chrome".equals(null)这样是不会报空指针的