浅色年华
2017-07-07 10:49:52
java语言== 和equal语法到底有什么区别
== 是什么?
“==”在Java编程语言中是一个二元操作符,用于比较基本数据类型(byte、shot、int、long、float、double、char、boolean)和对象。对于基本数据类型,用“==”比较就是比较他们的数值。对于引用数据类型(类,接口,数组)“==”对比两个对象基于内存引用,如果两个对象的引用完全相同(指向同一个对象)时,“==”操作将返回true,否则返回false。
equal是什么?
equals()方法定义在Object类里面,根据具体的业务逻辑来定义该方法,用于检查两个对象的相等性。默认的equals方法实现是与“==”操作一样的,基于业务需求重写equals方法是最好的实践之一。
举个例子
String类重写了equals方法,它返回true如果两个字符串对象包含有相同的内容,但是==只有他们的引用地址相同时才返回true
public class TestEqual { public static void main(String[] args) { String s1 = "123"; String s2 = "123"; String s3 = new String("123"); String s4 = new String("123"); System.out.println(s1 == s2); System.out.println(s3 == s4); System.out.println(s2 == s3); System.out.println(s2.equals(s1)); System.out.println(s2.equals(s4)); } }
运行结果如下:
true false false true true
问题来了,String 不是基本数据类型,==比较的肯定是对象在内存中的引用,s1难道和s2引用是一样的么?
第一条现在内存中创建了"123"这个String,然后将reference赋给s1,如果这个时候还有一条语句String s2= "123";那么JVM将不再创建"123",而是直接将第一个"123"的reference赋给s2,也就是说,s1和s2是使用同一块内存,而如果加上String s3= new String("123");那JVM将在内存中再创建一块区域放上“123”这个字符串。所以String类型比较特殊,单独记一下就可以拉
评论
最近浏览
1248612588 LV1
2019年10月22日
小河码 LV1
2019年8月30日
小明程序员 LV9
2018年11月13日
1486780197 LV2
2018年11月10日
付修立 LV4
2018年8月31日
梦醒繁华丶 LV19
2018年4月26日
HTZone LV1
2017年12月12日
coding喵 LV16
2017年11月19日
王庆乾wdq LV13
2017年10月7日
逝水流 LV1
2017年9月28日