public class JavaMoney implements Comparable<JavaMoney> {
private final long amount;
public JavaMoney(long amount) {
this.amount = amount;
}
@Override
public int compareTo(@NotNull JavaMoney o) {
return Long.compare(this.amount, o.amount);
}
}
...
public static void main(String[] args) {
JavaMoney javaMoney = new JavaMoney(2000L);
JavaMoney javaMoney1 = new JavaMoney(1000L);
if (javaMoney.compareTo(javaMoney1) > 0) {
System.out.println("Money가 Money1보다 금액이 큽니다.");
}
}
fun main() {
val javaMoney = JavaMoney(2000L)
val javaMoney1 = JavaMoney(1000L)
if (javaMoney > javaMoney1) {
println("Money가 Money1보다 큽니다.")
}
}
자바와 다르게 객체를 비교할 때 비교연산자를 사용하면 자동으로 compareTo를 호출해준다.
동등성(Equality): 두 객체의 값이 같은가?
동일성(Identity): 완전히 동일한 객체인가? 즉 주소가 같은가?
자바에서는 동일성에 ==을 사용, 동등성에 equals를 사용.
코틀린에서는 동일성에 ===를 사용, 동등성에==를 사용. ==를 사용하면 간접적으로 equals를 호출해준다.
JavaMoney javaMoney2 = new JavaMoney(1000L);
JavaMoney javaMoney3 = javaMoney2;
JavaMoney javaMoney4 = new JavaMoney(1000L);
System.out.println(javaMoney2 == javaMoney3); //true
System.out.println(javaMoney2 == javaMoney4); //false
System.out.println(javaMoney2.equals(javaMoney4)); //true
val javaMoney2 = JavaMoney(1000L)
val javaMoney3 = javaMoney2
val javaMoney4 = JavaMoney(1000L)
println(javaMoney2 === javaMoney3) //true
println(javaMoney2 === javaMoney4) //false
println(javaMoney2 == javaMoney4) //true