Earlier quoted context omitted.
Even a smart compiler can't break the program semantics, and without a closed world assumption it simply can't assume that an entirely different part of the program doesn't expect to observe object identity for a type. Java is adding small, orthogonal features that amount to the same feature set as value types in other languages, but can be cherry-picked into existing code for partial advantages without significant c…
Nullability is coming later, and already with Panama you have plenty of room to do C like stuff. Go isn't much better.
Go isn't even memory-safe under data races, because they don't want to pick between slower loads (like .NET's Memory.Span) or removing fat pointers. Meanwhile the JVM never had value types until now so they'd silently break a lot of code if a single keyword applied willy-nilly introduced torn reads like struct does in C#. It's coming but as a separate opt-in.