其实对于刚刚入行软件开发,特别是java开发的小伙伴来说,经常会出现几个看起来用法相差不多的java方法,这着实让人头疼,一时间没法正确分辨它们之间的细微区别,好了,下面就是小编整理的有关java中equals的使用,来看看equals跟==究竟是如何分辨的呢?
首先我们要明确的是,equals是一个函数,那么对于函数,我们可以这样看,可以关注它的返回值和参数,对于equals来说,它的返回值是boolen,参数是object,object是什么呢,通俗来说,object是一个类但它是一个特殊的类,它是所有类的父类,java的所有类都是由object类派生而来,不过大家在创建类时是不需要继承它的。
其实,equals的作用很简单,比较两个实例是否相同。如果是,返回true,不是则false。
实例如下:
public class Test { public static void main(String args[]) { String Str1 = new String("test"); String Str2 = Str1; String Str3 = new String("test "); boolean retunVal; retunVal = Str1.equals( Str2 ); System.out.println("返回值 = " + retunVal); retunVal = Str1.equals( Str3 ); System.out.println("返回值 = " + retunVal); } }
以上程序执行结果为:
返回值 = true 返回值 = true
我们知道,java中的数据类型,可分为两类:
一种是基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
它们之间的比较,应用双等号==,比较的是他们的值。 基本数据类型比较(string 除外), == 和 equals 两者都是比较值;
第二种是复合数据类型(类)
当它们用==进行比较的时候,比较的是它们在内存中的存放地址,所以,除非是同一个new出来的对象,它们的比较后的结果为true,否则比较后结果为false。
java当中所有的类都是继承于object这个基类的,在object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址, 对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的
但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date,在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
因为Object的equals方法也是用双等号==进行比较的,所以比较后的结果跟双等号==的结果相同。
还想了解更多java入门知识,记得关注本站哦。