标题:Java中equal和==的区别是什么
equal和"=="均表示相等的意思,但是它们在进行实际的相等判定时,却有非常大的区别。
一、==运算符的执行原理
在开始说equal和==的区别之前,先来看一段示例代码:
public class EqualTest {
public static void main(String[] args) {
//定义3个字符串对象
String a="1234";
String b="1234";
String c=new String("1234");
//3种不同的布尔判定
System.out.println(a==b); //true
System.out.println(a==c); //false
System.out.println(a.equals(c)); //true
}
}
以上代码中,定义了3个字符串变量,它们的值都是“1234”,按理来说,对它们进行布尔判定都应该返回true。但事实上,执行结果是:true、 false、true
第2个为false的原因在于:a 和 c指向的是不同的对象。
==运用在基本数据类型的时候,通过比较它们实际的值来判定是否相同;;而用于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是是否指向同一个对象。通过new String()来创建的字符串会单独生成一个对象,所以a 和 c 指向的不是同一个对象 。
【注意】:Java的双引号表达式本身就会创建一个字符串对象。例如,1234就创建了一个值为1234的String对象。
二、equal()方法的含义
equal()方法是java.lang.Object的方法,也就是所有的Java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方式来判定两个对象是否相等,其中默认的方式和==相同。另外,java.lang.String类是一个特殊的类,它不可以被继承,它的equal()方法用来比较字符串的字符序列是否完全相等。以下是一段学生对象的相等判定的示例代码:
//Equal()方法用来比较字符串的字符序列是否完全相等。
//学生类
class Student{
private String name; //姓名
private int age; //年龄
public Student(String name,int age){
this.name=name;
this.age=age;
}
//比较方法,只有姓名和年龄都相等才相等
@Override
public boolean equals(Object obj) {
Student stu=(Student)obj;
return this.name.equals(stu.name)&&this.age==stu.age;
}
}
public class EqualTest1 {
public static void main(String[] args) {
//比较两个学生对象是否相等
Student stu1=new Student("lisa",10);
Student stu2=new Student("lisa",10);
System.out.println(stu1.equals(stu2)); //true
}
}
如果将其中一个学生对象的姓名或年龄改掉,则结果变为false。
综上,equal和""都是表示相等的意思,但是他们相等的含义却有所区别。
“”运算符运用在基本数据类型的时候,通过比较它们实际的值来判定是否相同;而用于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是是否指向同一个对象。
equal()方法是java.lang.Object的方法,也就是所有的Java类都会有的方法。它可以被程序员覆盖重写,通过自定义的方式来判定两个对象是否相等。
对于字符串java.lang.String类来说,它的equal()方法用来比较字符串的字符序列是否完全相等。