Kotlin 和 Java 中相等判断的区别

Java 中的相等判断

操作符 ==

  • 如果是基本数据类型比较的是值是否相等
  • 如果是引用数据类型比较的是内存地址是否相同

equals() 方法

  • 默认情况下在不重写 equals() 方法时,等价于 ==

  • 重写 equals() 方法时,常用于比较对象的结构是否相等,可以通过快捷键自动生成 equals()hashCode()toString() 等等方法。

    public class Person {
        private String name;
        private String age;
    
        @Override
        public int hashCode() {
    	        final int prime = 31;
    	        int result = 1;
    	        result = prime * result + age;
    	        result = prime * result + ((name == null) ? 0 : name.hashCode());
    	        return result;
    	    }
    
    	    @Override
    	    public boolean equals(Object obj) {
    	        if (this == obj)
    	        return true;
        	    if (obj == null)
    	            return false;
    	        if (getClass() != obj.getClass())
        	        return false;
    	        Person other = (Person) obj;
    	        if (age != other.age)
    	            return false;
    	        if (name == null) {
    	            if (other.name != null)
    	                return false;
    	        } else if (!name.equals(other.name))
    	            return false;
    	        return true;
        	}
    }
    

Kotlin 中的相等判断

在 Kotlin 中有两种类型的相等判断:

  1. 结构相等 (== - 检查 equals() )
  2. 引用相等 (=== - 判断两个引用是否指向同一个对象)
  • Kotlin 中的操作符 == 等价于 equals() 用于比较对象的结构是否相等, 很多情况下使用的是 ==,因为对于浮点类型 Float 和 Double,其实现方法 equals() 并不遵循 IEEE 754 浮点运算标准。

    fun main() {
        val a:Float = 0f
        val b:Float = -0f
        println("${a==b}")           // true
        println("${a.equals(b)}")    // false
    }
    
  • 比较对象的引用是否相等 ( === ) ,如果是基本数据类型 === 等价于 ==

  • Java 相同,Any.equals() 函数比较的是两个对象的引用是否相等。也就是说,如果没有覆盖 equals() 函数,== 与 === 的结果是相同的。

# Kotlin 

作者:ITmob
来源:ITmob.cn
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×