操作符之关系操作符

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

			//:operators/Equicalence.java
			public class Equivalence {
    
    
				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);
					}
				}/*Output:
				false
				true
				*/

      语句Systemout.println(n1 == n2)将打印出括号内的比较式的布尔值结果。读者可能认为输出结果肯定先是true,再是false,因为两个Integer对象都是相同的。但是尽管对象的内容相同,然而对象的引用却是不同的,而 = = == ==和!=比较的就是对象的引用。所以输出结果实际上显示false,再是true。这自然会使第一次接触关系操作符的人感到惊奇。
  如果想比较两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“基本类型”,基本类型直接使用 = = == ==和!=即可。下面举例说明如何使用:

			//:operators/EqualsMethod.java
			public class EqualsMethod{
    
    
					public static void main(String[] args){
    
    
							Integer n1 = new Integer(47);
							Integer n2 = new Integer(47);
							System.out.println(n1.equals(n2));
					}
			}/*Output:
			true
			*/

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

			//:operators/EqualsMethod.java
			//Default equals() does not compare contents.
			Class Value {
    
    
				int i;
			}
			public class EqualsMethod2{
    
    
				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));
				}
			}/*Output:
			false
			*/

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

猜你喜欢

转载自blog.csdn.net/qq_45179865/article/details/106898846