Boh*_*ian 332

  • 绝对正确,波希米亚人.环境变量是"OS事物",属性是"Java事物".碰巧,Java选择将OS变量公开为属性(就像Java公开当前目录和"其他东西"作为属性一样),但它们实际上是不同的东西. (42认同)
  • 请注意,您还可以使用环境变量`JAVA_TOOL_OPTIONS`设置系统属性. (11认同)
  • `System.grtProperties()`列出了所有属性,那些从命令行设置的属性就在那里,但是没有办法将它们与系统添加的其他属性区分开来,如果这就是你所要求的. (7认同)
  • @KanagaveluSugumar是的,您需要重新启动:在启动时从环境中读取环境变量设置.即`System.getenv(String name)`在调用时不会动态读取系统中的值. (6认同)

Jak*_*sey 144

我认为两者之间的区别归结为访问.系统环境变量可由任何进程访问,Java系统属性只能通过添加它们的进程访问.

同样如波西米亚所述,env变量在OS中设置(但它们可以通过Java设置),系统属性作为命令行选项传递或通过设置setProperty().

  • 最后,它是如何添加变量和变量的范围. (4认同)
  • 这个答案似乎不正确。环境变量的范围是每个进程的。每个进程都会看到自己的环境。 (3认同)
  • 环境变量映射是 Windows 和每个 UNIX 后代中的每个进程对象。最好考虑的是“进程属性”或某种进程私有的东西。该映射是在创建进程时创建的。初始值由进程创建者设置。通常,该地图应是创建者地图的副本。用户应用程序通常由用户shell创建,因此,用户应用程序的环境通常应是用户shell环境的副本。这里没有动态继承,没有“回退到父级”机制。 (2认同)