一、==和equals的作用
==是java中用于比较的语法。对于不同的比较对象,比较的东西不同。
1.==
(1)基本类型
对于基本类型,==比较的是它们的值是否相等。
public void fun1(){
int a = 1;
int b = 1;
System.out.println(a==b);//输出true;
}
(2)对象
对于对象,==比较的是它们在内存中的地址是否相等。
public void fun2(){
Object one = new Object();
Object two = new Object();
Object three = one;
System.out.println(one==two);//输出false;
System.out.println(three==one);//输出true;
}
2.equals方法
equals方法是Object类中的方法。
//Object中的equals方法
public boolean equals(Object obj) {
return (this == obj);
}
通过Objcet中equals方法的代码可以得知,普通对象的默认equals方法是通过==来进行判断的,因此可以得出结论:没有重写equals方法的对象调用equals和==的返回值是一样的。
二、String类的讨论
String类比较特殊,特殊就在于它重写了equals方法。String类的equals方法是比较两个String的内容是否相同。
普通情况
根据==和String类的equals方法规则可以得出以下结论:
public void fun3() {
String s = "123";
String s2 = new String("123");
String s3 = new String("1") + new String("23");
System.out.println(s == s2);//输出false,s和s2在内存中的地址是不同的。
System.out.println(s.equals(s2));//输出true,s和s2的值是相同的。
System.out.println(s.equals(s3));//输出true,s和s3的值是相同的。
System.out.println(s == s3);//输出false,s和s3在内存中的地址是不同的。
}
三、总结
==和equals的区别通常会在各大公司的校招笔试选择题中出现,作为基础题目,只要记住==和equals比较的具体内容就能做出这类题目