结论:
通常情况下,只需关注null的比较
null比较:只能使用==比较,
非null比较:首先验证非null,然后可以使用equals比较
典型的比较方式:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
public static void main(String[] args) {
String s1="s1";
String s2=new String("s1");
System.out.println(s1.equals(s2));//false
System.out.println(s1==s2);//false
String s3=null;
String s4=null;
System.out.println(s3==s4);//true
System.out.println(s3.equals(s4));//空指针异常
float f1=2.1f;
double d1=2.1;
System.out.println(f1==d1);//同值的float和double比较为false
int i1=2;
double d2=2;
float f2=2f;
System.out.println(i1==d2);//同值的int和float,double比较为true
System.out.println(i1==f2);
//equals只能比较相同类型的元素,==可以比较不同元素
//System.out.println(i1.equals(d1));
}
public static void main(String[] args) {
String s1=new String("s1");
String s2=new String("s1");
System.out.println(s1.equals(s2));//true
System.out.println(s1==s2);//false
Map<String,String> map1=new HashMap<String,String>();
map1.put("firstKey","firstValue");
Map<String,String> map2=new HashMap<String,String>();
map2.put("firstKey","firstValue");
System.out.println(map1.equals(map2));//true
System.out.println(map1==map2);//false
}