Kotlin for Java Developers
Introduction#
Most people coming to Kotlin do have a programming background in Java.
This topic collects examples comparing Java to Kotlin, highlighting the most important differences and those gems Kotlin offers over Java.
Declaring Variables
In Kotlin, variable declarations look a bit different than Java’s:
val i : Int = 42
-
They start with either
val
orvar
, making the declarationfinal
(”value”) or variable. -
The type is noted after the name, separated by a
:
-
Thanks to Kotlin’s type inference the explicit type declaration can be obmitted if there is an assignment with a type the compiler is able to unambigously detect
Java | Kotlin |
---|---|
int i = 42; |
var i = 42 (or var i : Int = 42 ) |
final int i = 42; |
val i = 42 |
Quick Facts
- Kotlin does not need
;
to end statements - Kotlin is null-safe
- Kotlin is 100% Java interoperable
- Kotlin has no primitives (but optimizes their object counterparts for the JVM, if possible)
- Kotlin classes have properties, not fields
- Kotlin offers data classes with auto-generated
equals
/hashCode
methods and field accessors - Kotlin only has runtime Exceptions, no checked Exceptions
- Kotlin has no
new
keyword. Creating objects is done just by calling the constructor like any other method. - Kotlin supports (limited) operator overloading. For example, accessing a value of a map can be written like:
val a = someMap["key"]
- Kotlin can not only be compiled to byte code for the JVM, but also into Java Script, enabling you to write both backend and frontend code in Kotlin
- Kotlin is fully compatible with Java 6, which is especially interesting in regards for support of (not so) old Android devices
- Kotlin is an officially supported language for Android development
- Kotlin’s collections have built-in disctinction between mutable and immutable collections.
- Kotlin supports Coroutines (experimental)
Equality & Identity
Kotlin uses ==
for equality (that is, calls equals
internally) and ===
for referential identity.
Java | Kotlin |
---|---|
a.equals(b); |
a == b |
a == b; |
a === b |
a != b; |
a !== b |
See: https://kotlinlang.org/docs/reference/equality.html
IF, TRY and others are expressions, not statements
In Kotlin, if
, try
and others are expressions (so they do return a value) rather than (void) statements.
So, for example, Kotlin does not have Java’s ternary Elvis Operator, but you can write something like this:
val i = if (someBoolean) 33 else 42
Even more unfamiliar, but equally expressive, is the try
expression:
val i = try {
Integer.parseInt(someString)
}
catch (ex : Exception)
{
42
}