- ==是一个运算符
- Equals则是String对象的方法,可以直接调用
基本数据类型的比较
- ==比较的是两个值是否相等,基本数据类型和引用型数据类型都可以使用
- Equals不能直接用于基本类型的比较。需要将基本类型转换为包装器进行比较。只有引用型数据类型才可以使用
引用对象比较
- ==和Equals都是比较内存中地址是否相等。
- String(特殊的引用型变量)。对于两个字符串的比较,不管是==还是Equals比较的都是字符串是否相同。
- 当创建两个String对象时,内存中地址不同,可以相同的值
总结
- ==操作符用来比较变量的值,也就是作用于对应的内存中所存储的数值
- 如果一个变量指向的数据是对象型的,这时涉及两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,也就是两个变量所对应的内存中的数值是否相等,这时需要==操作符。
- Equals用于比较两个独立对象的内容是否相同,只能比较对象的外表,而无法比较内里。它比较的两个对象是独立的。
public class Equals {
public static void main(String[] args) {
String s1="hello";
String s2="hello";
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("s1==s3:"+(s1==s3));
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s3==s4:"+(s3==s4));
System.out.println("s2.equals(s4):"+s2.equals(s4));
System.out.println("s3.equals(s4):"+s3.equals(s4));
System.out.println("s1.equals(s2):"+s1.equals(s2));
System.out.println("----------------------------------------------");
int a=2;
int b=4;
Integer a1 = new Integer(2);
Integer b1 = new Integer(4);
Short a2 = new Short((short) 2);
System.out.println(a==b);
System.out.println(a1==b1);
System.out.println(a1.equals(b1));
System.out.println(a1.equals(a));
System.out.println(a==a2);
System.out.println(a2.equals(a));
System.out.println("--------------------------------------------");
A aa = new A(2);
B bb = new B(2);
System.out.println(aa.a==bb.b);
System.out.println(aa.equals(bb));
}
}
class A{
int a;
public A(int a) {
this.a = a;
}
}
class B{
int b;
public B(int b) {
this.b = b;
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/994bb55fd0ad9084321cb64a5b9c03b2.png)