Java. ==,equals和equalsIgnoreCase

今日分享:

==、equals、equalsIgnoreCase的用法和区别。

    三者都是用来比较两个值是否相等

1.“ ==”用法

 ==:是用来比较两个变量代表的地址是否相等的运算符,结果返回一个boolean值,如果相同就是ture,不同为flase。

例如:

public class demo{
          //创建一个基本类型
           int a1=10;
            int a2=10;
            System.out.println(a1==a2);
}

 运行结果:

ture

上例可以看出:两个基本类型相比较,他们的返回结果为ture,在运算过程中,创建的10放入了内存中的常量区域,由于a1和a2的值相同,他们共同指向了10这个常量区同一个地址,因此结果为ture.

同时,“==”可以用来作基本类型和类类型的比较。

例2.

public class demo2{
            int a1=10;
            Integer a2=10;
            Integer a3=new Integer(10);
           System.out.println(a1==a2);
           System.out.println(a1==a3);
}

 运行结果:

ture
ture

由结果可以看出,返回的值均为ture,在类类型中封装了一个基本类型,当基本类型与类类型进行比较时,会自动的将封装的基本类型数据取出进行计算。

例3.引用例2

                
        System.out.println(a2==a3);
} 运行结果:
flase

 由结果可以看出,两个类类型进行计算时,反应出的地址并不相同,这是因为,两个类类型进行计算时,是不会进行自动拆箱的。

2. equals用法

    equals是Object中定义的方法,用来比较两个值是否“相等”,在这里的“相等“是可以根据各自的需求自己定义的,各个类可以重写equals方法。

例4.String类中定义的equals方法与我们自己定义的一个Integer类中equals方法的比较

public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}
	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }

 重写后的Integer

public class MyInteger {

	int value;

	public MyInteger(int value) {
		this.value = value;
	}

	public boolean equals(Object obj) {
		if (obj instanceof MyInteger) {
			MyInteger my = (MyInteger) obj;

			return this.value == my.value;
		}

		return false;
	}

 从上述代码可以看出,String类与Integer类所比较的内容不同,因此在重写后所比较的侧重点不同,但他们有所相同之处是在比较之时,首先满足必须是同类型,不是同类型返回一定是flase,如果是同类型,String类中,需要挨个比较各个字符是否相同,如果每个字符比较后都相同,则返回ture。而Integer类中,如果是同类型比较,则进一步需要比较两个值,如果值相同,则返回ture.

3.equalsIgnoreCase用法

equalsIgnoreCase方法是String类中定义的方法,只能用来比较字符串,用来比较字符串对应的字符是否相同,与String类中的equals方法类似,但是equalsIgnoreCase方法比较字符串时,忽略大小写。常见用在:检验验证码(不区分大小写),计算机中的全盘搜索(不区分大小写)。

例5.String类中定义的equalsIgnoreCase方法:

public boolean equalsIgnoreCase(String anotherString) {
        return (this == anotherString) ? true :
               (anotherString != null) 
             && (anotherString.count == count) 
             &&regionMatches(true, 0, anotherString, 0, count);
    }

 以上是”==”、equals、equalsIgnoreCase用法及区别。

猜你喜欢

转载自purple12.iteye.com/blog/2252569
今日推荐