- 对于==:
比较的是基本数据类型的话,就是比较的是两个变量的值。
int num1 = 50;
int num2 = 50;
System.out.println(num1 == num2); //true
比较的是引用类型的话,就是比较两个是否引用了同一个对象。
String s1=new String("abc");
//在堆内存开辟一块空间存放"abc"这一字符串,并在栈内存开辟一块名为s1的空间指向"abc"
String s2=new String("abc");
//又在堆内存开辟一块空间存放"abc"这一字符串,又在栈内存开辟一块名为s2的空间指向"abc"这个对象,与s1的指向不同
String s3="abc";
//在常量池中找是否有"abc"这个字符串,如果没有就开辟一块,并在栈中开辟一块名为s3的空间指向"abc"
String s4="abc";
//在常量池中找是否有"abc"这个字符串,已经找到,直接指向s3这块空间
System.out.println(s1==s2); //false
System.out.println(s2==s3);//false
System.out.println(s3==s4);//ftrue - 对于equals:
当没有重写object的equals方法时,即直接调用object.equals时,与==号比较引用类型一样,比较的是否为同一个对象
Scanner sc1=new Scanner(System.in);
Scanner sc2=new Scanner(System.in);
Scanner sc=sc1;
System.out.println(sc1.equals(sc2));//false
System.out.println(sc1.equals(sc));//true
当重写了equals方法的话,比较的是所指向对象的属性
String s0=new String("abc");
String s1="abc";
String s2="abc";
String s3=new String("abc");
System.out.println(s0.equals(s1));//true
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//true
System.out.println(s0.equals(s3));//true
以上都是自己敲代码总结的,如果有什么错误,希望前辈些指导一下。