91名师指路-头部
91名师指路

java中equals和 == 的比较

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

一: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

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部