一、“==”
在java中,==主要有两个作用:
- 基础数据类型:比较两个的值是否相等,例如两个int类型的变量a、b,比较的是值是否相等
- 引用类型比较:比较的是引用的地址是否相同,举个栗子,两个Stu类型的变量stu1、stu2,比较的是这两个引用所指对象的地址是否相同。
二、“equals”
1.先看源码,在源码中,equals比较的就是当前对象的引用和obj的引用是否相同,在这里equals和==的效果是一样的。
2.重写equals方法
例如,String在Object的基础上重写了equals,功能发生了变化
从源码中可以看出,String中的equals方法其实比较的是字符串的内容是否一样。也就是说,像String、Data这些重写equals的类,使用时和Object的不一样
3测试String
public class Main {
public static void main(String[] args) {
String str1="hello";
String str2=new String ("hello");
String str3=str2;//值传递
System.out.println(str1==str2);//false
System.out.println(str1==str3);//false
System.out.println(str2==str3);//true
System.out.println(str1.equals(str2));//true
System.out.println(str1.equals(str3));//true
System.out.println(str2.equals(str3));//true
}
}
结果解释:
4.一个小问题
String类型还有一个小问题需要注意,上代码
public class Main {
public static void main(String[] args) {
String str1="hello";
String str2=new String ("hello");
str2=str2.intern();
System.out.println(str1==str2);//true
System.out.println(str1.equals(str2)); //true
}
}
inter方法会检查字符池里是否存在,若存在就直接返回true.这里str1会在字符池里有一个,然后str2.intern()检查字符池里存在就不在新建,直接把str2指向它。