==和equals的区别

最近面试发现基础还是挺重要的,很多时候都用习惯了一个东西,把它的一些原理什么的都忘记了,毕竟太菜了。

==是用来比较两个对象的内存地址,如果是引用相同的对象,那么它们就是在同一个内存区域中,比较的时候就是true。

在比较的时候我又发现了一个问题

Integer a=128;
Integer b =128;
System.out.println(a==b);

Integer n=127;
Integer m=127;
System.out.println(n==m);

在使用这样的代码块执行出来的结果居然是false,true

后来又找到了原因Integer这个类型在常量池中的存储范围是-128到127,超过127之后会创建一个新的对象来保存这个值,m和n则分别在两个不同的对象中,所以是不相等。

如果将int替换Integer之后,执行结果是true,true,对于基本数据类型,他们是HashSet策略存储起来,所以他们的引用都是指向的同一块地址。

如果使用这样的代码块去判断

String a="128";
String b ="128";

System.out.println(a==b);

String c=new String("128");
System.out.println(c==b);

执行结果是true,false

和其他基本数据类型同理,当它没有使用new的时候,它的数据是放在内存的常量池中的存储的,当它使用new之后就相当于在内存中开辟了另一个空间用来放这个对象,而==比较的是内存空间,所以是为false。

equals方法。

首先equals方法是object类一个可重写的方法,基本上所有的类都可以重写这个方法,即使是我们什么都不写,直接返回true也是可以的,但是一般情况下都是用来判断对象内的属性值是否相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值