原 java中equals和 == 的比较
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/Dream/article/details/1193
一:String(引用类型) 类型的 "==" 和 equals 比较。
/**
* 功能:String(引用类型) 类型的 == 和 equals 比较
* 备注:更多资料请访问 https://www.91mszl.com
*/
public static void main(String[] args) {
String str1="aa";
String str2="aa";
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
System.out.println("********************");
String str3=new String("abc");
String str4=new String("abc");
System.out.println(str3 == str4);
System.out.println(str3.equals(str4));
System.out.println("********************");
String str5=new String("abc");
String str6="abc";
System.out.println(str5 == str6);
System.out.println(str5.equals(str6));
}
执行结果:
true
true
********************
false
true
********************
false
true
小总结:
1)“==” 即可以比较基本类型也可以比较引用类型,如果比较的是基本类型,比较的是值是否相等,如果比较的是引用类型则比较的是地址是否相等。即只要是new出来的对象,== 比较永远是false
2)equals比较引用类型时,主要看它是否重写了equals方法和hashCode方法(重写equals方法也必须要重写hashCode方法),如果没有被重写过,即用的是Object类的方法,则实际上是“==” 比较,即比较的是地址是否相等,如果被重写了,则比较的是值是否相等。
二:Integer(包装类型)"==" 和 equals 比较。
/**
* 功能:Integer(包装类型) == 和 equals 比较
* 备注:更多资料请访问 https://www.91mszl.com
*/
public static void main(String[] args) {
Integer a=127;
Integer b=127;
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println("********************");
Integer c=128;
Integer d=128;
System.out.println(c == d);
System.out.println(c.equals(d));
System.out.println("********************");
Integer x = new Integer(123);
Integer y = new Integer(123);
System.out.println(x == y);
System.out.println(x.equals(y));
System.out.println("********************");
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k);
System.out.println(z.equals(k));
System.out.println("********************");
Integer e=new Integer(127);
Integer f=new Integer(127);
System.out.println(e == f);
System.out.println(e.equals(f));
System.out.println("********************");
Integer g=new Integer(128);
Integer h=new Integer(128);
System.out.println(g == h);
System.out.println(g.equals(h));
}
执行结果:
true
true
********************
false
true
********************
false
true
********************
true
true
********************
false
true
********************
false
true
小总结:
1)Integer 缓存池的范围是 - 128 ~ 127,超出范围会创建新的对象。
2)对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等引用变量,"==" 比较的是地址是否相等(即是否是同一个引用),而equals比较的是具体的值是否相等。
代码演示
package com.mszl.eq;
import java.util.HashSet;
import java.util.Set;
/**
* 功能:java中equals和 "==" 的比较
* 备注:更多资料请访问 https://www.91mszl.com
* @author bobo teacher
*/
public class E1 {
public static void main(String[] args) {
String aa=new String("abc");
String bb=new String("abc");
System.out.println(aa == bb); // false
System.out.println(aa.equals(bb)); // true
System.out.println(" ******************** ");
Set<String> s1=new HashSet<>();
s1.add(aa);
s1.add(bb);
System.out.println(s1.size()); // 1
System.out.println(" ******************** ");
user u1 = new user("zhangsan");
user u2 = new user("zhangsan");
System.out.println(u1 == u2); // false
System.out.println(u1.equals(u2)); // false
System.out.println(" ******************** ");
Set<user> t=new HashSet<>();
t.add(u1);
t.add(u2);
System.out.println(t.size()); // 2
}
}
执行结果:
false
true
********************
1
********************
false
false
********************
2
总结:
1 “==” 即可以比较基本类型也可以比较引用类型,如果比较的是基本类型,比较的是值是否相等,如果比较的是引用类型则比较的是地址是否相等。即只要是new出来的对象,== 比较永远是false
2 equals比较的是引用类型,equals比较看它是否被重写过,如果没有被重写过,即用的是Object类的方法,则实际上是“==” 比较,即比较的是地址是否相等。
3 这里的equals方法是String类里重写了equals和hashCode方法的(重写equals也必须要重写hashCode方法)。如下图所示。
String 类中重写的hashCode方法。
String类中重写的equals方法。
2020-03-31 17:27:19 阅读(680)
名师出品,必属精品 https://www.91mszl.com
博主信息