您的位置:首页 > 编程语言 > Java开发

java中==和equals()的区别

2015-07-17 19:46 633 查看
1.==用来比较两个基本数据类型数值是否相同

public class StringDemo03{
public static void main(String args[]){
int x = 30 ;
int y = 30 ;
System.out.println("两个数字的比较结果:" + (x==y)) ;
}
}
程序运行结果:

两个数字的比较结果:true

如果使用==比较字符串的内容,会出现以下错误:

public class StringDemo04{
public static void main(String args[]){
String str1 = "hello" ;					// 直接赋值
String str2 = new String("hello") ;		// 通过new赋值
String str3 = str2 ;					// 传递引用
System.out.println("str1 == str2 --> " + (str1==str2)) ;	//(a)
System.out.println("str1 == str3 --> " + (str1==str3)) ;	//(b)
System.out.println("str2 == str3 --> " + (str2==str3)) ;	//(c)
}
};


程序运行结果:

str1 == str2-->false

str1 == str3-->false



str2 == str3-->true

虽然以上程序中String内容都相同,但比较结果有时相同又是不同,如图



(a)对str1和str2来说,其内容分别保存在不同的空间,所以即使内容相等,地址值也是不相等的。==是用来进行数值比较,所以str1和str2比较不相等。str1 == str2-->false

(b)对str1和str3来说,其内容分别保存在不同的空间,所以即使内容相等,地址值也是不相等的。==是用来进行数值比较,所以str1和str3比较不相等。str1 == str3-->false

(c)对str2和str3来说,它们指向了同一个空间,是同一个地址,所以str2和str3得地址值相等str2 == str3-->true

如果要比较字符串的内容可以使用equals方法

public class StringDemo05{
public static void main(String args[]){
String str1 = "hello" ;					// 直接赋值
String str2 = new String("hello") ;		// 通过new赋值
String str3 = str2 ;					// 传递引用
System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ;
System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ;
System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ;
}
};


程序运行结果:

str1 equals str2-->[b]true[/b]

str1[b]equals str3-->true

[/b]

str2[b]equals str3-->true[/b]

2.equals方法用来比较两个对象是否相同,即两个对象的内容是否相等。

class Student{
private String name;
private int age;
public Student(String name, int age){
this.name = name;
this.age = age;
}

public boolean equals(Object obj){  //覆写Object类中的equals()方法
if(this == obj){         //如果两个对象地址相等,则肯定是同一对象
return true;
}

if(!(obj instanceof Student)){      //判断传进来的对象是否是Student的实例
return false;

}

Student stu =(Student)obj;      //向下转型
if(stu.name.equals(this.name) && stu.age == this.age){   //逐个属性比较
return true;
}else{
return false;
}
}

public String toString(){
return "姓名" +this.name + "年龄" +this.age;
}
}
public class ObjectDemo{
public static void main(String[] args) {
Student stu1 = new Student("小明",20);
Student stu2 = new Student("小明",20);
System.out.println(stu1 == stu2);
System.out.println(stu1.equals(stu2));

}

}
程序运行结果:

false



true

Object类的equals方法源码:

public boolean equals(Object obj) {
return (this == obj);}


在用Java的类描述对象的时候,如果要判断该对象是否相同时,比如学生对象有自己的姓名和年龄,希望根据姓名和年龄的相同来判断学生对象是否相同。这时使用Object类的equals就不能满足需求了,就需要通过覆盖equals的方式,建立学生对象比较相同的具体内容。这也就是大家常听到的“==是比较地址的,equals是用来比较对象内容”的原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: