“==”
对于基本数据类型和引用数据类型 == 的作用效果是不同的。
String a="string";
String b="string";
String c=new String("string");
System.out.println(a==b);//true
System.out.println(a==c);//false
System.out.println(a.equals(b));//true
System.out.println(a.equals(c));//true
因为 a 和 b 指向的是同一个引用,所以 == 也是 true,而 new String()方法则开辟了内存空间,所以为 false,
而 equals 比较的一直是值,所以结果都是 true。
“equals”
equals 方法其实是属于 Object 类的方法。因为 Object 类是所有类的直接或间接父类,也就是说所有的类中的 equals () 方法都继承自 Object 类,而通过源码我们发现,Object 类中 equals () 方法底层实现其实就是 "==" 号,不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。
public boolean equals(Object obj){
return(this==obj);
}
总结
== 对于基本类型来说是值比较,对于引用类型是引用的比较。而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,如 String,Integer 等把它变成了值比较。