浅析java中 == 和equals的区别

"=="操作符的作用

1.对比基本数据类型的值是否相等

2.对比引用在对内存中的引用内存是否相同


equals的作用

对比两个不同对象的内容是否相同

equals所在位置:

在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写

public boolean equals(Object obj) {
        return (this == obj);
    }

  用几个简单例子轻松了解区别

例子1.两个变量名不同 赋值相同

            String b = new String("b1");
			String b1 = new String("b1");
			System.out.println("==2结果 "+(b==b1)); //flase
			System.out.println("equals2 "+b.equals(b1));   //true

结论:如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。

如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

所以此时两个变量引用地址相同 用== 跟equals结果相同

例子2.两个String对象引用不同,内容相同

            String b = new String("b1");
			String b1 = new String("b1");
			System.out.println("==2结果 "+(b==b1)); //flase
			System.out.println("equals2 "+b.equals(b1));   //true
结论: 两条new语句创建了两个对象,然后这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即两个引用中存储的数值(引用地址值)是不相同的,所以用==会返回flase 而用equals 会返回true

例子3.两个Object对象引用不同 内容相同

public class test {
		String a;
		int b;
		
		public test(String a,int b){
			this.a=a;
			this.b=b;
		}
		
		public static void main(String args[]){
			test t = new test("a的值",1);
			test t1 = new test("a的值",1);
			System.out.println("==的结果:"+(t==t1)); //flase
			System.out.println("equals的结果:"+(t.equals(t1))); //false

			
		}

结论:如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值