欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA中==与equals()方法的区别

程序员文章站 2022-07-14 12:06:44
...

在java中数据进行比较的时候主要使用的方法是==和equals()方法进行比较

一、首先我们来看一下使用==号进行比较时数据是如何进行比较的

==是对变量值进行比较的,主要比较的是变量值的存储地址,当进行比较的数据是同一个数据则返回true,反之则返回false。

下面我们用String类型的数据进行举例说明;

	public static void main(String[] args) {
		String s1 = new String("张三");
		String s2 = new String("张三");
		
		String s3 = "张三";
		String s4 = "张三";
		
		boolean b =(s1==s2);
		System.out.println(b);
		
		boolean b2 = (s1==s3);
		System.out.println(b2);
		
		boolean b3 = (s3==s4);
		System.out.println(b3);
		

	}

上述的进行比较的数据中b、b2的返回值为false,b3的返回值true.

是因为String在进行new的时候创建的地址不同的数据,所以在比较时s1与s2的地址是不同的所以返回为false

而s3和s4的创建时s3的数据先在常量池中创建了一个张三对象、当再次创建s4时常量池中已经有了“张三”,所以将s4指向常量池中s3创建的“张三”,因此地址是一样的。

二、数据进行对比的第二种方式equals方法

首先介绍一下equals方法主要对比的是数据的内容 

当进行比较的数据是同一个数据则返回true,反之则返回false。

下面我们一起看一下使用equals进行比较的效果

	public static void main(String[] args) {
		String s1 = new String("张三");
		String s2 = new String("张三");
		
		boolean b4 = (s1.equals(s2));
		System.out.println(b4);

	}

比较结果返回为true。

然后我们一起走进equals()的实现代码中分析一下他的比较方式。

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

首先进行比较两个字符串的地址,当地址不一样时直接返回false,地址不一样时判断是否为空、长度是否一样、最后在不区分大写的情况下进行比较内容是否一样。

我们来总结一下:==与equals都是进行比较用的,而==是比较的是创建的对象在堆内存中存储的地址是否相同、而equals则比较的是比较对象的内容是否相同。