Java中==与equals()方法的区别
1. 基本数据类型和引用数据类型
八大基本数据类型:byte、short、int、long、、char、boolean、float、double,八种基本数据类型都有相对相应的包装类,类中包含各操作方法,在不进行初始化时,值为空。
引用数据类型:类,接口类型,数组类型等。
特殊的引用数据类型:String、Date、文件类、包装类等
2. ==与equals
在使用 == 时,判断两边的是否相等,根据数据类型的不同可以分为以下两种类型:
1.基本数据类型:根据基本数据类型的值判断是否相等,注意事基本数据类型的值,两端数据类型可以不一样,12==12.0F 是true
2. 引用数据类型:比较引用对象的地址值是否相等
equals()方法是Object类中的一个方法,Object是Java中任意类的父类,Object类中的equals()比较类对象的地址值是否相同,其源码如下:
public boolean equals(Object obj) {
return this == obj;
}
由源码的方法现实可以看出,Object类型的equals()与==在一般的引用数据类型比较是是一样的。但是对于特殊的引用数据类型,Java在其实现类中重写了equals()比较的不是两个对象的地址值是否相等,而是比较两个对象的属性内容是否完全相等。如:
Object object1 = new Object();
Object object2 = new Object();
System.out.println("一般引用数据类型:"+object1.equals(object2));
Integer integer1 = new Integer(12);
Integer integer2 = new Integer(12);
System.out.println("基本数据包装类:"+integer1.equals(integer2));;
其结果是:
一般引用数据类型:false
基本数据包装类:true
- 关于基本数据类型与其包装类==与equals()的使用
详细代码:
int i1 = 127;
float f1 = 127f;
Integer i2 = new Integer(127);
Integer i3 = new Integer(127);
Integer i4 = Integer.valueOf(127);
Integer i5 = Integer.valueOf(127);
Integer i6 = Integer.valueOf(128);
Integer i7 = Integer.valueOf(128);
System.out.println(i1 == f1);//判断值相等,true
System.out.println(i1 == i2);//i2 创建了新对象,true
System.out.println(i1 == i4);// valueOf 也是创建了一个新对象,true
System.out.println(i2.equals(i3));//true 重写equals方法,比较值相等
System.out.println(i2==i3);//false 比较内存地址相等
System.out.println(i2.equals(i4)); //true,比较值相等
System.out.println(i2==i4);// true,Integer数据类型的缓存机制(Catch),范围是-128~127
System.out.println(i4==i5);// true
System.out.println(i6==i7);//flase
其结果:
true
true
true
true
false
true
false
true
false
基本数据类型的包装类由于使用频繁,Byte、Short、Integer、Long、Character、Boolean设有缓存机制,其中Byte、Short、Integer、Long、Character都是-128~127范围设置缓存机制。
如Integer在执行valueOf的时候,会先去检查内存中是否存在该数字,如果存在的话,就直接从内存中取出返回,如果不存在的话,就新建一个Integer对象。如i4与i5的地址是811,i6与i7则是因为数值是128不在缓存内,都是重新创建的因此地址不同。
上一篇: 我今天被老师表扬了
下一篇: Java学习笔记之异常
推荐阅读
-
ThinkPHP中的create方法与自动令牌验证实例教程
-
JQuery中window.onload函数与$(document).ready()的区别实例讲解
-
jquery中html、val与text三者属性取值的联系与区别介绍
-
解析php中const与define的应用区别
-
在Linux中挂载ISO文件的两种方法(mount命令与mount软件)
-
linux中bin与sbin目录的作用及区别介绍
-
JavaScript中的toString()和toLocaleString()方法的区别
-
微信小程序 image组件binderror使用例子与js中的onerror区别
-
jquery中的查找parents与closest方法之间的区别
-
php面向对象程序设计中self与static的区别分析