scala对象创建
第三种方式可以用于解决使用非 new 关键字创建对象的问题。
(1)new:使用 new 关键字创建类的对象。
(2)伴生对象:使用 object关键字创建一个单例对象。
(3)apply:apply是一个方法,需要在伴生对象中实现这个方法。
scala对象所属类
在Scala中有两种方式判断对象所属的类,分别如下:
(1)getClass:
使用反射机制判断Scala对象所属的类。假设判断对象A和对象B是否对象所属类型属于同一个类,通过A.getClass=B.getClass的方式判断是否相等,A.getClass表示A对象所对应类的反射对象,B.getClass表示B对象所对应类的反射对象。如果这两个对象的反射对象相等,那么这两个对象一定属于同一个类。
(2)isInstanceof:
判断对象是否属于某一个类型,A.isInStanceof[B]表示判断对象A是 否属于类型B,实际上是判断A是否是B或者B的子对象。如果返回true,则表示A是B的子对象;来返回 fase,则表示A不是B的子对象。使用 isInstanceof进行判断时,A表示对象,B表示类型。
scala对象相等性判断
在介绍如何判断Scala对象是否相等之前,先来了解一下Java中判断两个对象是否相等的方式。Java中的类型分为两大类,一种是基本类型,主要存储的是数值,使用==的方式判断两个值是否相等;另一种是引用类型,在引用类型中有两种比较方式,第一种方式是使用==比较引用的是否是同一个对象,第二种方式是使用自定义的equals方法比较两个对象的引用是否相等。
在Scala中有三种方法判断对象的相等性,这三种方法主要分为两大类,第一种和第二种为一类,第三种方法为另外一类。在大多数情况下(非空),equal方法和==比较的内容是相同的。
三种判断方法如下:
(1) equal方法:相当于Java 中的equals方法。
(2) == 与 !=:相当于Java中的equals方法。
(3) eq 与 ne:相当于Java中的引用(使用==判断引用)。
scala覆写equals
在重写equals方法时,需要满足以下几个条件:
(1)方法的名字不可以改变。
(2)参数列表一定要相同,参数类型是Any类型。
(3)重写方法时需要使用 override 关键字。
2. 覆写原则
在重写equals 方法时,除了需要满足不同的要求之外,还需要符合方法覆写的原则。覆写原则如下:
(1)反射性:在比较对象 x 和对象 y 是否相等时,对象 × 调用 equals 方法与自身相比时,结果一定返回 true,即 x.equals(x)的结果是 true。
(2)对称性:如果x.equals(y)的结果为true,那么y.equals(x)的结果一定也是true.
(3)过渡性:如果x.equals(y)=true, y.equals(z)=true,那么x.equals(z)=true
(4)非空性:如果 x 是一个非空的元素,那么 x.equals(null)结果返回false