java -version显示path中首个java命令的版本,非项目实际运行版本;真实运行版本须用runtime.version()获取,它不受环境配置干扰,准确反映jvm加载的jdk版本。

直接在命令行输入 java -version 就能确认当前系统默认使用的 JDK 版本,但这个结果未必是你项目实际编译/运行时用的版本。
命令行查的是 java 命令指向的 JRE/JDK
执行 java -version 输出的是环境变量 PATH 中第一个匹配到的 java 可执行文件所属的 JDK/JRE 版本。它不反映 IDE 或构建工具(如 Maven、Gradle)配置的 JDK。
- 如果装了多个 JDK,
java -version只告诉你「哪个被优先调用」,不是「你正在用哪个」 - Mac/Linux 下可用
which java或type -a java查路径;Windows 用where java - 注意区分
java -version(运行时)和javac -version(编译器),二者版本可能不一致
Java 程序内部获取运行时 JDK 版本
代码里用 System.getProperty("java.version") 或 Runtime.version()(JDK 9+ 推荐)可拿到 JVM 实际加载的版本信息,这才是项目真实运行环境。
System.out.println(System.getProperty("java.version")); // 如 "17.0.2"
System.out.println(Runtime.version().toString()); // JDK 9+,输出更结构化,如 "17.0.2+8-86"
-
java.version是字符串,格式由 JVM 实现决定(如 JDK 8 是1.8.0_351,JDK 17 是17.0.2) -
Runtime.version()返回Runtime.Version对象,支持major()、minor()等方法,适合做版本判断 - 该值不受
JAVA_HOME或 IDE 设置干扰,是 JVM 启动时确定的真实版本
Maven 和 IntelliJ 中容易忽略的版本错位
IDE 和构建工具常各自维护 JDK 配置,它们和系统 PATH 无关,却直接影响编译结果。
立即学习“Java免费学习笔记(深入)”;
- IntelliJ:检查
File → Project Structure → Project → Project SDK和Project language level,二者需匹配 - Maven:
pom.xml中的maven-compiler-plugin的<source></source>和<target></target>仅控制字节码级别,不指定使用哪个 JDK 编译——实际取决于Maven进程启动时的JAVA_HOME - Gradle:看
gradle.properties中的org.gradle.java.home,或运行gradle --version查 Gradle 自身 JDK,再确认sourceCompatibility设置
真正关键的不是“怎么查”,而是意识到有至少四个可能不同的 JDK 版本共存:系统默认 java、IDE 配置的 SDK、Maven/Gradle 启动用的 JDK、以及程序运行时的 JVM。其中只有 Runtime.version() 能 100% 反映代码执行时的版本,其他都只是配置项或预期值。










