Java中==和equals方法

Java有两种方式来测试两个变量是否相等:一种是利用==运算符,另一种是利用equals()方法

一.==运算符

   当使用==来判断两个变量是否相等时

 1.如果两个是基本类型变量,且都是数值型(不一定要求数据类型要严格相同),只要两个变量的值相等,就将返回true

例如:

 

                int it=65;
		float fl=65.0f;
		//将返回true
		System.out.println("65和65.0是否相等?"+(it==fl));
		
		char ch='A';
		//将返回true
		System.out.println("65和A是否相等?"+(it==ch));</span>

 2.对于两个引用型变量,只有它们指向同一个对象时,==才会返回true==不可用于比较类型上没有父子关系的两个对象。

例如: 

                String str1=new String("hello");
		String str2=new String("hello");
		//将返回false,<span style="font-family: 宋体;font-size:24px;">str1与str2指向的不是同一个对象</span>
		System.out.println("str1和str2是否相等?"+(str1==str2));</span>
例如:

<span style="font-size:24px;">               
                 //编译错误,Java.lang.String与EqualTest类没有继承关系
		//System.out.println("hello"==new EqualTest());</span>

二.equals()方法

在判断引用变量是否相等时,我们也希望有一种类似于“值相等”的判断规则,并不严格要求两个引用变量指向同一个对象,就可以考虑使用equals()方法。

 1.equals()方法是Object类提供的一个实例方法,因此所有引用变量都可以调用该方法来判断是否与其他变量相等。

 2.但这个方法判断两个对象相等的标准与使用==运算符没有区别,同样要求引用变量指向同一个对象时才会返回true。因此,若想自定义相等的标准,需要我们重写equals()方法。

    3.String已经重写Objectequals()方法,只要两个字符串所包含的字符序列相同,通过equals()比较将返回true,否则将返回false

例如:

		String str1=new String("hello");
		String str2=new String("hello");
		//将返回true
		System.out.println("str1和str2是否相等?"+(str1.equals(str2)));
		

重写equals方法示例:

package EqualsTeest;

class Person {
	private String name;
	private String idStr;

	public Person() {
	}
	public Person(String name, String idStr) {
		this.name = name;
		this.idStr = idStr;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return this.name;
	}

	public void setIdStr() {
		this.idStr = idStr;
	}

	public String getIdStr() {
		return idStr;
	}
	
	//重写equals()方法,自定义相等的标准
	public boolean equals(Object obj){
		//如果两个对象是同一个对象
		if(this==obj){
			return true;
		}
		//只有当obj是Person对象
		if(obj!=null&&obj.getClass()==Person.class){
			Person personObj=(Person)obj;
			//并且当前对象的idStr与obj的idStr相等时才可判断两个对象相等
			if(this.getIdStr().equals(personObj.getIdStr())){
				return true;
			}
		}
		return false;
	}
}

public class OverridEqualsRight {
	public static void main(String[] args){
		Person pl=new Person("孙悟空","123456789");
		Person p2=new Person("孙行者","123456789");
		Person p3=new Person("孙悟饭","987654321");
		
		//返回true
		System.out.println("p1与p2是否相等?"+pl.equals(p2));
		//返回false	
		System.out.println("p2与p3是否相等?"+p2.equals(p3));
	}
}


 







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值