
In this section, we will explore some things that you will need to consider as you have your Kotlin code call out to Java classes and methods. This is one of the reasons why Google was comfortable in endorsing Kotlin - if having Kotlin code call into the Android SDK was going to be some huge problem, Google might have been more cautious. There are a variety of occasions where you will need to think about interoperability, but for the most part, “it just works”. On the whole, things tend to work fairly smoothly. While they may get some Kotlin wrappers, many developers will wind up working with them directly.

In particular, many major frameworks are implemented in Java, such as the Android SDK and Spring. While Kotlin libraries are growing in number, they pale in comparison to the vast array of Java libraries.

Otherwise, structural equality is used, which disagrees with the standard so that NaN is equal to itself, NaN is considered greater than any other element, including POSITIVE_INFINITY, and -0.0 is not equal to 0.0.Particularly for new projects, most likely you will be focused on Kotlin code calling into Java code. When an equality check operands are statically known to be Float or Double (nullable or not), the check follows the IEEE 754 Standard for Floating-Point Arithmetic. For values represented by primitive types at runtime (for example, Int), the = equality check is equivalent to the = check. a = b evaluates to true if and only if a and b point to the same object. Referential equality is checked by the = operation and its negated counterpart !=.

Structural equality has nothing to do with comparison defined by the Comparable interface, so only a custom equals(Any?) implementation may affect the behavior of the operator. Functions with the same name and other signatures, like equals(other: Foo), don't affect equality checks with the operators = and !=. To provide a custom equals check implementation, override the equals(other: Any?): Boolean function. Note that there's no point in optimizing your code when comparing to null explicitly: a = null will be automatically translated to a = null. If a is not null, it calls the equals(Any?) function, otherwise ( a is null) it checks that b is referentially equal to null.
