== 与 equals()

在java中,==与equals()都是用来比较引用,只是==即可以比较基本类型,也可以比较对象,而equals()则只能在对象之间进行引用比较。

先来了解一下==运算符,分析一下语句执行结果:

int num1 = 10;

int num2 = 10;

System.out.println(num1 == num2);  //打印true

String str1 = new String("123");

String str2 = new String("123");

System.out.println(str1 == str2);  //打印false

可以看出,由于基本类型不是对象,即不存在引用,所以==运算符只会比较两个基本类型的值,但当==作用于对象时,我们可以通过第二条打印语句发现,虽然str1与str2都是引用相同的值"123",但是这两个对象分别是引用两个不同内存地址的值,即引用不相同,因此str1 == str2返回false,==作用于对象时,比较的是两个对象的引用是否相同!

==运算符进行等值比较。也就是说,对于任何引用值X和Y,当且仅当X和Y指向同一对象时, X==Y返回真。

Java.lang包中的Object类有public boolean equals(Object obj)方法。它也比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。

Object类的equals( )方法很少被使用,因为,多数情况下我们希望比较两个对象的内容,而不是判断两个引用是否指向同一对象。

String类中的覆盖equals()方法返回true,当且仅当参数是一个不为null 的String对象,该对象与调用该方法的String对象具有相同的字符顺序。例如:

String s1 = new String("JDK1.2");

String s2 = new String("JDK1.2");

方法s1.equals(s2)返回真,尽管s1和s2指向两个不同的对象。

下面的例子使用equals方法测试雇员的名字和生日:

public class Employee {
	private String name;

	// private Mydate birthDate;
	private float salary;

	public Employee(String name, float salary) {
		this.name = name;
		// this.birthDate = Dob;
		this.salary = salary;
	}

	public boolean equals(Object o) {
		boolean result = false;
		if ((o != null) && (o instanceof Employee)) {
			Employee e = (Employee) o;
			if (name.equals(e.name)) {
				result = true;
			}
		}
		return result;
	}

	public int hashCode() {
		return (name.hashCode());
	}
}

我们覆盖了hashCode方法。这样做保证了相同的雇员对象有相同的hashCode。

下面的程序判断两个雇员对象引用是否相同:

public class TestEquals {
	public static void main(String[ ] args){
		Employee emp1 = new Employee("Fred Smith", 25000.0F);
		Employeeemp2 = new Employee("Fred Smith", 25000.0F);
	if(emp1 == emp2){
			System.out.println("emp1 is identical to emp2")'
		}else{
			System.out.println("emp1 is not identical to emp2")'
		}

		if(emp1.equals(emp2) ){
			System.out.println("emp1 is equals to emp2")'
		}else{
			System.out.println("emp1 is not equals to emp2")'
		}

		emp2 = emp1;
		System.out.println("set emp2 = emp1");
		if(emp1 == emp2){
			System.out.println("emp1 is identical to emp2")'
		}else{
			System.out.println("emp1 is not identical to emp2")'
		}
	}
}

执行结果为:

emp1 is not identical to emp2

emp1 is equals to emp2

set emp2 = emp1

emp1 is identical to emp2

更多 Java视频教程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值