文章

力扣JDK版本

一直在力扣上刷题,也没关注它的JDK版本,这篇文章记录一下探索的经历。

起因

在LeetCode写46. 全排列时使用了removeLast()来回溯path,在IDEA上写的时候竟然提示没有这个方法,看List和ArrayList源码也没有。这时候意识到LeetCode的JDK和本地的版本不一样,恐怕比本地的高不少。

查找

我的本地环境是JDK17,是没有removeLast()方法的。

本地环境ArrayList

Java SE 17 API文档也没有。

Java SE 17 API文档

后来我又翻了以下其他版本的文档,发现Java21才引入的removeLast()。(JEP 431

Introduce new interfaces to represent collections with a defined encounter order. Each such collection has a well-defined first element, second element, and so forth, up to the last element. It also provides uniform APIs for accessing its first and last elements, and for processing its elements in reverse order.

看来LeetCode的Java环境至少是21+,但还不确定是21还是22,我猜应该是21,毕竟21是长期支持(LTS)版本。

查看JDK版本的方法

那怎么才能看到LeetCode的Java版本呢?

方法一:使用命令行工具

1
java -version

执行该命令后,终端会显示当前JDK的版本号。

方法二:使用Java的System类

在Java程序中,可以使用System类的getProperty方法来获取JDK的版本号。在Java代码中加入以下代码:

1
System.out.println(System.getProperty("java.version"));

运行该Java程序后,控制台将输出当前JDK的版本号。

方法三:使用Java的Runtime类

Java的Runtime类也提供了获取JDK版本号的方法。在Java代码中加入以下代码:

1
System.out.println(Runtime.version());

运行该Java程序后,控制台会显示当前JDK的版本号。

结果

方法一不行,没有终端。方法二也不行,用户没有权限。

1
2
3
4
5
6
7
8
9
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.version" "read")
  at line 488, java.base/java.security.AccessControlContext.checkPermission
  at line 1071, java.base/java.security.AccessController.checkPermission
  at line 411, java.base/java.lang.SecurityManager.checkPermission
  at line 1146, java.base/java.lang.SecurityManager.checkPropertyAccess
  at line 966, java.base/java.lang.System.getProperty
  at line 3, Solution.hIndex
  at line 56, __DriverSolution__.__helper__
  at line 86, __Driver__.main

方法三输出了21.0.1+12-29,看来力扣JDK版本就是21了。

本文由作者按照 CC BY 4.0 进行授权