

If one calls a member of such a variable, the runtime locates the memory address of the variable. The basic idea behind null is that one can define an uninitialized variable. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement.

My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). It was the invention of the null reference in 1965. I guess that everybody in software development with more than a couple of years of experience has heard the following quote: In this post, I'd like to expand on the problem of nullability and how it's solved in Kotlin and Java and add my comments to the Twitter thread. Martin Bonnin did a tweet from a single slide, and it created quite a stir, even attracting Brian Goetz.


Var local variables - if the variable is not modified between the check and the usage, is not captured in a lambda that modifies it, and is not a local delegated property. Smart casts cannot be used on open properties or properties that have custom getters. Val properties - if the property is private or internal or if the check is performed in the same module where the property is declared. Val local variables - always, with the exception of local delegated properties. More specifically, smart casts can be used under the following conditions: Note that smart casts work only when the compiler can guarantee that the variable won't change between the check and the usage.
