Javac是否与平台无关?

3

我是Java的新手,希望有人能澄清我的疑惑——关于平台无关性,我知道Java是一种平台无关性的语言,而JVM是平台相关的,但Java编译器又是否是平台无关的呢?

5个回答

9

你的问题涉及四个元素:

  1. 你程序的Java源代码
  2. javac编译器
  3. 编译器在编译你的源代码时生成的字节码
  4. 执行字节码以运行你的程序的Java虚拟机(JVM)。 (当你键入java MyMainClass时,这是运行的程序。)

第1和第3项与平台无关(除非你的程序使用平台相关的外部库)。第2和第4项是平台相关的(也就是说,每个平台--Windows、Linux、Mac等--都使用自己的javac和JVM版本)。

结果是你可以在任何运行javac的平台上编译你的Java程序,然后在同一平台或任何其他有JVM的平台上执行该程序。


感谢 @Ted Hopp 清晰的解释。 - Linguistic

2

不,javac并不是跨平台的,每个平台都有自己的可执行形式的javac

也就是说,你不能将Linux JDK复制到Windows上并期望其能正常工作。


2
@AnandMishra - 那请点赞该回答。带评论的点赞更好。 - TheLostMind
感谢@Jigar Joshi的回答。 - Linguistic

1
Java编译器的实现不是跨平台的。它将源代码编译成平台无关的字节码,由平台相关的JVM执行。

0
从技术上讲,JVM并不是完全跨平台的,因为你必须下载特定平台的工具版本。Java编译器生成的字节码(.class文件)才是真正跨平台的。

0
在Windows中,javac似乎是以.exe格式出现的,这意味着它是依赖于平台的。每个平台都有不同的Java编译器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接