Java 12 to Java 16 brought steady improvements, refining features and introducing new enhancements. Let’s break it down:


Java 12 Features (Released March 2019)

  1. Switch Expressions (Preview)
    • Allowed switch to return a value in a more concise way:
      var result = switch (day) {
          case MONDAY, FRIDAY -> "Busy day!";
          case SATURDAY, SUNDAY -> "Weekend!";
          default -> "Regular day.";
      };
      
    • Improves readability and eliminates repetitive break statements.
  2. Improved Garbage Collection
    • Introduced Shenandoah GC, reducing pause times for large heaps.
    • Enhanced performance in memory management.
  3. Compact Number Formatting
    • Helps format numbers in a human-readable way:
      NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
      System.out.println(formatter.format(1000)); // Outputs "1K"
      

Java 13 Features (Released September 2019)

  1. Text Blocks (Preview)
    • Enables easier multiline string handling:
      String json = """
          {
              "name": "Java",
              "version": 13
          }
          """;
      
    • Improves readability and reduces escape sequences.
  2. Enhancements to Switch Expressions
    • Further refinement of switch case for clearer structure.

Java 14 Features (Released March 2020)

  1. Records (Preview)
    • Introduced a simpler way to create immutable data carriers:
      record Person(String name, int age) {}
      
    • Reduces boilerplate code in POJOs.
  2. Pattern Matching for instanceof (Preview)
    • Eliminates redundant casting:
      if (obj instanceof String str) {
          System.out.println(str.length());
      }
      
  3. Helpful NullPointerException Messages
    • Improves debugging by clearly indicating what was null.

Java 15 Features (Released September 2020)

  1. Text Blocks (Final)
    • Multiline strings were finalized after previews in Java 13 & 14.
  2. Sealed Classes (Preview)
    • Restricts inheritance to specific subclasses:
      public sealed class Animal permits Dog, Cat {}
      
  3. Hidden Classes
    • Allows creating runtime classes that aren’t visible outside their defining class loader.

Java 16 Features (Released March 2021)

  1. Records (Final)
    • Records became a permanent part of Java.
  2. Pattern Matching for instanceof (Final)
    • Officially part of the language after preview versions.
  3. Improved Stream API
    • Added toList() method for easier list conversion:
      Stream<String> stream = Stream.of("A", "B", "C");
      List<String> list = stream.toList();
      

Java 12 to 16 focused on refining usability, improving syntax, and optimizing performance.