The following features graduated from preview status to become permanent parts of the Java language in version 16:
: Most internal elements of the JDK are now encapsulated by default to encourage the use of standard APIs and improve security. Access to these internals now requires explicit --add-opens flags.
: Simplifies the common task of checking an object's type and then casting it. It allows you to declare a binding variable directly in the instanceof check. JDK 16: What’s coming in Java 16
Old way : if (obj instanceof String) { String s = (String) obj; ... }
JDK 16, released on March 16, 2021, introduced 17 main enhancements (JDK Enhancement Proposals or JEPs) designed to improve developer productivity, application performance, and platform modernization. As a release, it was supported for six months until the release of Java 17. Key Production-Ready Language Features The following features graduated from preview status to
: Provides a compact syntax for declaring classes that serve as transparent holders for immutable data. A record automatically generates a constructor, accessors, equals() , hashCode() , and toString() methods based on its components. Example : public record Point(int x, int y) {} .
: Designates primitive wrapper classes (like Integer and Double ) as value-based and deprecates their constructors for removal to prepare for future Project Valhalla enhancements. Performance and Tools The Arrival of Java 16 - Oracle Blogs It allows you to declare a binding variable
New way : if (obj instanceof String s) { ... use s directly ... } Modernization and Infrastructure