关系操作符(测试对象的等价性:判断对象的引用相等或对象的实际内容相等)附带源码

本文详细介绍了Java中的关系操作符,包括其工作原理及布尔结果生成方式,并通过实例对比了==与equals()的区别,解释了在对象比较时两者的不同行为。

        关系操作符生成的是一个boolean(布尔)结果,它们计算的是操作数的值之间的关系。如果关系是真实的,关系表达式会生成true(真);如果关系不真实,则生成false(假)。关系操作符包括小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。等于和不等于适用于所有的基本数据类型,而其他比较符不适用于boolean类型。因为boolean值只能为truefalse,“大于”和“小于”没有实际意义。关系操作符==!=也适用于所有对象、但这两个操作符通常会使第一次接触Java的程序员感到迷惑。下面是一个例子:

package assignment;

public class Equivalence {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Integer n1 = new Integer(47);
		Integer n2 = new Integer(47);

		System.out.println(n1 == n2);
		System.out.println(n1 != n2);
	}

}

程序运行结果如下:

false
true

        语句System.out.println(n1 == n2)将打印出括号内的比较式的布尔值结果。读者可能认为输出结果肯定先是true,再是false,因为两个Integer对象都是相同的。但是尽管对象的内容相同,然而对象的引用却是不同的,而==!=比较的就是对象的引用。所以输出结果实际上先是false,再是true。这自然会使第一次接触关系操作符的人感到惊奇。

         如果想比较两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都是用的特殊方法equals()。但这个方法不适用于“基本类型”,基本类型直接使用==!=即可。下面举例说明如何使用:

package assignment;

public class EqualsMethod {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Integer n1 = new Integer(47);
		Integer n2 = new Integer(47);

		System.out.println(n1.equals(n2));

	}

}

程序运行结果如下:

true

        结果正如我们所预料的那样。但事情并不总是这么简单!假设你自己创建了自己的类,就像下面这样:

package assignment;

class Value {
	int i;
}

public class EqualsMethod2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Value v1 = new Value();
		Value v2 = new Value();

		v1.i = v2.i = 100;

		System.out.println(v1.equals(v2));
	}

}

程序运行结果如下:

false
         事情再次变得令人费解了:结果又是false!这是由于equals()的默认行为是比较引用。所以除非在自己的新类中覆盖equals()方法,否则不可能表现出我们希望的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值