java中的euqal和==
一、java当中的数据类型和“==”的含义:
基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(),比较的是他们的值。
复合数据类型(类):当他们用()进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。
注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。
二、equals()方法介绍:
JAVA当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被复写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。
三、equals()方法和“==”的区别
如上图所示,当我们将c的引用对象给了c1之后(Car c1=c),相当于将对象复制一份出来,两个对象的内存地址值一样。所以指向同一个实体,因此,此时判定两者“==”时,返回值是true。
虽然是个对象都引用new Car,但是是两个不同的对象。每一次new,都产生不同的实体,但如果我们在carclass中重写了equal()方法,并且规定当color和num两个属性相等时候,两个car队形相等的话,此时可以判定c和c1相等(c.euqal(c1) == true)。