java中==和equals的使用方法-创新互联

这期内容当中小编将会给大家带来有关java中==和equals的使用方法,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

10余年专注成都网站制作,企业网站建设,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于企业网站建设,高端网页制作,对成都发电机回收等多个领域,拥有丰富的网站营销经验。

equals的分析

public class TestEquals {
	public static void main(String[] args) {
		
		TestEquals t1 = new TestEquals();
		TestEquals t2 = new TestEquals();
		System.out.println(t1.equals(t2));  //false
		
		String s1 = new String();
		String s2 = new String();		
	
        System.out.println(System.identityHashCode(s1));
		System.out.println(System.identityHashCode(s2));
		System.out.println(System.identityHashCode(new String()));
		System.out.println(System.identityHashCode(new String()));
        System.out.println(s1.equals(s2));  // true
	}
}

输出结果:
false
366712642
1829164700
2018699554
1311053135
true

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

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

1、对于基本数据类型,比较的是他们的具体内容是不是一样,跟他们的内存地址无关。

举个例子:

public class Test{
	
	public static void main(String[] args) {
		int i = 10;
		double j = 10.0;
		float m = 10.0f;
		char k = 10;
		boolean b = true;
		
		System.out.println(i == j);
		System.out.println(i == m);
		System.out.println(m == k);
		System.out.println("*******************");
		//System.out.println(i == b);  很明显,布尔型不能和其他基本数据类型比较,编译报错.
		System.out.println(System.identityHashCode(i));
		System.out.println(System.identityHashCode(j));
		System.out.println(System.identityHashCode(m));
		System.out.println(System.identityHashCode(k));
		System.out.println(System.identityHashCode(b));
	}
}

输出:

true
true
true
*******************
366712642
1829164700
2018699554
1311053135
118352462

==分析:

①根据比较的结果和内存地址来看,内容一样,内存地址不一样,但是返回的结果都是true,说明比较的 时候只看变量中存储的内容是否相同,而跟内存地址无关。

②==比较的两边数据需要能强制转换成同一类型,比如int和double的比较,会强制转换到double。

③布尔类型不能和int,float,double,char等基本数据类型做比较,编译时就报错。

2、对于引用数据类型的比较:

public class Test{
	
	public static void main(String[] args) {
		Test t1 = new Test();
		Test t2 = new Test();
        String name1 = "琼宝";
		String name2 = "琼宝";
		
		System.out.println(name1 == name2);						 // true
		System.out.println(System.identityHashCode(name1));		 //366712642	
		System.out.println(System.identityHashCode(name2));		 //366712642
		
		System.out.println(t1 == t2);                             //false
		System.out.println(System.identityHashCode(t1));          //366712642
		System.out.println(System.identityHashCode(t2));          //1829164700
        System.out.println(System.identityHashCode(new Test()));  //2018699554
		System.out.println(System.identityHashCode(new Test()));  //1311053135
        System.out.println(new Test() == new Test());
	}
}

输出:

true
366712642
366712642
false
366712642
1829164700
2018699554
1311053135
false

分析:

①对于引用数据类型,此时涉及到两块内存的问题, 而且比较的也是内存地址是否相同,比如执行语句:

Test t1 = new Test() Test t2 = new Test()时,会开辟两块内存,一块用于储存t1 t2 ,一 块用于储存两个 new Test()。而很明显的是,t1和t2的内存地址不一样,就连两个new Test()的地 址都不一样,所以此时用==来比较的时候,结果必然是false.

(补充:t1和t2中存储的其实是new Test() 对象使用的内存的首地址。)

②对于String类型来说,内容相同的时候,其内存地址也相同,比较的时候看的也是地址。

如果要比较对象中存储的内容是否相同(不是比较地址),那么==就无法实现,此时需要equals。

总结:

1.==用于比较基本数据类型时,比较的是内容是否相等,比较引用数据类型时,看的是内存地址是否相等。

2.equals只能比较引用数据类型(对象),没被重写之前,使用==来比较内存地址,重写后比较的是对象的具 体内容和属性是否一致。

上述就是小编为大家分享的java中==和equals的使用方法了,如果您也有类似的疑惑,不妨参照上述方法进行尝试。如果想了解更多相关内容,请关注创新互联行业资讯。


网站名称:java中==和equals的使用方法-创新互联
本文来源:http://scyanting.com/article/dgides.html