diff --git a/core-java-modules/core-java-lang-4/README.md b/core-java-modules/core-java-lang-4/README.md
new file mode 100644
index 0000000000..ff00688772
--- /dev/null
+++ b/core-java-modules/core-java-lang-4/README.md
@@ -0,0 +1,5 @@
+## Core Java Lang (Part 4)
+
+This module contains articles about core features in the Java language
+
+- TODO
diff --git a/core-java-modules/core-java-lang-4/pom.xml b/core-java-modules/core-java-lang-4/pom.xml
new file mode 100644
index 0000000000..3e92e9f9c7
--- /dev/null
+++ b/core-java-modules/core-java-lang-4/pom.xml
@@ -0,0 +1,47 @@
+
+
+ 4.0.0
+ core-java-lang-4
+ 0.1.0-SNAPSHOT
+ core-java-lang-4
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+ ../
+
+
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh.version}
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh.version}
+ test
+
+
+
+
+ core-java-lang-4
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ 1.28
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/BenchmarkRunner.java b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/BenchmarkRunner.java
new file mode 100644
index 0000000000..ee34114195
--- /dev/null
+++ b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/BenchmarkRunner.java
@@ -0,0 +1,34 @@
+package com.baeldung.finalkeyword;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+
+import java.util.concurrent.TimeUnit;
+
+public class BenchmarkRunner {
+
+ public static void main(String[] args) throws Exception {
+ org.openjdk.jmh.Main.main(args);
+ }
+
+ @Benchmark
+ @OutputTimeUnit(TimeUnit.NANOSECONDS)
+ @BenchmarkMode(Mode.AverageTime)
+ public static String concatNonFinalStrings() {
+ String x = "x";
+ String y = "y";
+ return x + y;
+ }
+
+ @Benchmark
+ @OutputTimeUnit(TimeUnit.NANOSECONDS)
+ @BenchmarkMode(Mode.AverageTime)
+ public static String concatFinalStrings() {
+ final String x = "x";
+ final String y = "y";
+ return x + y;
+ }
+
+}
diff --git a/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/ClassVariableFinal.java b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/ClassVariableFinal.java
new file mode 100644
index 0000000000..1aeef76e58
--- /dev/null
+++ b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/ClassVariableFinal.java
@@ -0,0 +1,19 @@
+package com.baeldung.finalkeyword;
+
+import java.io.Console;
+
+public class ClassVariableFinal {
+
+ static final boolean doX = false;
+ static final boolean doY = true;
+
+ public static void main(String[] args) {
+ Console console = System.console();
+ if (doX) {
+ console.writer().println("x");
+ } else if (doY) {
+ console.writer().println("y");
+ }
+ }
+
+}
diff --git a/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/ClassVariableNonFinal.java b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/ClassVariableNonFinal.java
new file mode 100644
index 0000000000..a6d83a66cb
--- /dev/null
+++ b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/finalkeyword/ClassVariableNonFinal.java
@@ -0,0 +1,19 @@
+package com.baeldung.finalkeyword;
+
+import java.io.Console;
+
+public class ClassVariableNonFinal {
+
+ static boolean doX = false;
+ static boolean doY = true;
+
+ public static void main(String[] args) {
+ Console console = System.console();
+ if (doX) {
+ console.writer().println("x");
+ } else if (doY) {
+ console.writer().println("y");
+ }
+ }
+
+}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 2d342c4216..7dc54bd907 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -82,6 +82,7 @@
core-java-lang
core-java-lang-2
core-java-lang-3
+ core-java-lang-4
core-java-lang-math
core-java-lang-math-2
core-java-lang-math-3