Earlier quoted context omitted.
Do nullable types and maybe types add much over checked dereferences (a la Java)? I imagine they might be good for performance (fewer checks), but does it really help with correctness/convenience/elegance/readability/etc?
Yes, because you get told about problems at compile-time rather than at runtime.
Dereferencing null is impossible, and the programmer is forced to explicitly handle null values.
This contrasts with C, where the same type is used for a nullable and a non-nullable pointer, so the compiler can't help out, the programmer is at risk of forgetting/failing to keep track of the difference between the two, and null-dereferences may occur (and give you undefined behaviour).
Java references take the same approach as C pointers, except all dereferences are checked at runtime, and dereferencing null throws an exception.
I like it! It does better than the Never null, only cromulent values approach (like C++ references), as this can be inconvenient in practice. It makes null-dereferences impossible, and doesn't do anything funky that would introduce needless runtime overhead.