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则比较的是比较对象的内容是否相同。
上一篇: 设计模式-工厂模式+策略模式
下一篇: Java中==与equals方法的区别