java中==和equals的区别

写在前面

学习的时候时刻要注意输出,输入的过程可能你没有体会到其中的精髓,你觉得自己很懂,其实是一直半解

碰到情况

想模拟一个登陆请求,密码不等于123456就else
在这里插入图片描述
稀里糊涂写出来

==的用法

  1. 结论:== 比较的是"值"是否相等
  2. 情况1对于基本类型的比较

int num1 = 10;
int num2 = 10;
System.out.println(num1 == num2); //true
在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名)都在函数的栈内存中分配

故对于基本类型而言,栈内存放的值就是10,== 比较的是值,所以输出true

  1. 情况2对于引用性不new String的String类型比较
String s1 = "chance";
String s2 = "chance";
System.out.println(s1 == s2);        //true
System.out.println(s1.equals(s2));    //true

当执行String s1 = “chance”;这条语句时,会在方法区中的字符常量池里找”chance”这个字符串,若没有找到,则将”chance”这个字符串放入字符串常量池中.而在栈中开辟一块名为s1的空间存放”chance”,这块空间的引用
在这里插入图片描述
我们已经说 == 比较的的值,在此例中,值为方法去字符串常量的地址,值相同,输出true。
4. 对于new String和普通常量的比较
你肯定明白了,对于new String和普通常量的 == 结果肯定为false,因为对象在堆内存的地址不同
在这里插入图片描述
5. 结论

首先,== 比较的就是值
对于基本变量类型,他们的值存在栈中,所以输出true
对于String类型的,如果不是new String的话,会在方法去的字符串常量池中找,所以指向的是同一个地址 输出true
对于new String和其他对象的比较,无论其中的“内容”是否相同,两个对象地址不同,输出false.

equals的用法

  1. equals方法用于两个对象的比较,不能比较基本对象
    在这里插入图片描述
    equals方法的源码是利用**==** ,本身与刚才讨论的并无不同
  2. special case
    String,Data类型重写了equals方法
    在这里插入图片描述
    这比较的就是内容

总结!

1)对于==,比较的是值是否相等
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;    
如果作用于引用类型的变量,则比较的是所指向的对象的地址即占栈内存里面存放的值  
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象    
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;    
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值