“==”与 equals()方法的使用以及注意事项

11 篇文章 0 订阅

Q:为什么我的标题 “==” 在前 equals() 在后?

A: 因为equals()方法是直接用“==” "实现" 的 所以我们先聊聊 “==”

 

“==”判等比较

概念 :“==”是等值比较,即比较的是变量的值

比较过程:

1.首先判断两个比较变量类型是否相同 如果不同返回false

2.如果相同继续判断变量的值是否相同 如果相同返回true ,如果不同返回false

1.基本数据类型,变量的值<数据>
2.引用类型,引用变量的值<对象的地址>

1.基本数据类型的例子

int a = 1;
int b = 1;
int c = 2;
System.out.println(a == b);    //结果是 true
System.out.println(a == c);    //结果是 false

2.引用类型的例子

自定义一个类

class MyClass{

    private int number;

    public MyClass(int number){
    	this.number = number;
    }

}
MyClass a = new MyClass(1);
MyClass b = new MyClass(1);
MyClass c = new MyClass(2);
	
System.out.println(a == b);    //结果是 false
System.out.println(a == c);    //结果是 false

特殊的引用类型

String a = "1";
String b = "1";
String c = "2";
	
System.out.println(a == b);    //结果是    true
System.out.println(a == c);    //结果是    false

由于字符串”1”创建时是在方法区的常量池中开辟的空间,并且下次使用时可以重复使用,即 a,b指向的地址是相同的,所以判等的结果是true

包装类引用类型

Integer a = 127;
Integer b = 127;
	
Integer c = 128;
Integer d = 128;
		
System.out.println(a == b);    //结果是    true
System.out.println(c == d);    //结果是    false
	

Integer包装类型中存在自动装箱的情况,当数据范围在-128~127之间时,创建的对象会在方法区的常量池中开辟空间(可复用),a与b指向常量池同一地址所以判等结果为true。当数据超出-128~127范围就会在堆区中开辟空间,由于c,d指向不同对象所以判等的结果为false,

equals()方法

equals()是Object类的方法 (目的是用来比较对象的数据内容是否一致<前提你要重写它 并实现这个功能>)。其中Integer , String,Date,file 这四个类自己已经重写了该方法所以可以直接用 。[ 没有重写equals()方法的类 ] 的equals()方法

本质就是 "==" 如果你要实现比较数据内容是否一致 就要重写它 

Object.equals()方法比较过程 和 "= =" 一样

由于基本数据类型 不是 继承Object的 所以基本数据类型 不能用equals()方法, 可以用 "=="来比较

引用类型的例子

自定义的类<没有重写equals()>

MyClass a = new MyClass(1);
MyClass b = new MyClass(1);
MyClass c = new MyClass(2);
			
System.out.println(a.equals(b));    //结果是 false
System.out.println(a.equals(c));    //结果是 false

结果和用 “==” 比较的一致 ,因为该类没有重写equals() 

该类重写equals()

class MyClass{
    private int number;
    public MyClass(int number){
    	this.number = number;
    }
	@Override	
	public boolean equals(Object arg0) {		
		boolean bl = false;
		MyClass mc = (MyClass)arg0;
		if(this.number == mc.number)
			bl = true;
		else
			bl = false;		
		return bl;
	}    
}
MyClass a = new MyClass(1);
MyClass b = new MyClass(1);
MyClass c = new MyClass(2);
			
System.out.println(a.equals(b));    //结果是 true
System.out.println(a.equals(c));    //结果是 false

会发现 a, b 比较的是number的值了。 因为a ,b的number 都是1 比较结果是 true

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值