“Java是可移植的”是什么意思?

2022-09-05 00:09:40

我对Java的可移植性感到困惑。如果Java语言是可移植的,为什么在J2ME中是未知的?enum

在C++,使用哪个平台或库并不重要。“C++语言”不会在所有平台上都改变。

我的目的是开发一个Java库,它只使用基元类型,如,或(类似于库)。我想在移动和桌面应用程序中使用此库。但似乎其他一些关键字并非在所有平台中都存在。intStringArrayGenetic algorithmsenum

所以我想我误解了“Java可移植性”的含义。那是什么意思?


答案 1

Java有三种风格:ME用于移动设备,SE用于桌面,EE用于企业。

“Java是可移植的”指的是SE版本。这意味着您可以在任何具有兼容 JVM 的硬件上运行 Java 字节码

这并不意味着ME与SE相同,因为SE与EE相同。EE有EJB,但SE和ME没有。这并没有使它们的便携性降低。

C++语言不会在所有平台上都改变。

这种说法并不完全正确。微软在其C++中添加了无法在其他地方运行的扩展。

ANSI C++可能意味着可移植的源代码,只要您远离特定于平台的扩展即可。它并不意味着可移植的字节码;您可能需要重新编译并重新链接。

您想在手机上运行遗传算法吗?我知道移动设备已经变得非常强大,但我受过教育,认为GA将是一种服务器端功能。移动设备对我来说更像是视图。


答案 2

每个硬件架构都有自己独特的指令集(添加ax,bx...),当你构建一个C++代码时,编译器会把它变成一个特定于你正在处理的系统/架构的机器代码。因此,您必须为不同的体系结构自定义和构建代码,以便它在其上工作。

但是在java中发生的事情是,当你构建它时,它被编译成一个Byte代码(而不是机器代码)。Java虚拟机(JVM)将字节码解释为指令,该指令可由运行程序的特定体系结构理解。每个主要的架构和操作系统都有JVM,所以你在Windows上写的代码将被解释并在MAC-OS或Linux上运行,而无需您进行任何源代码级别的修改。这就是为什么Java是可移植的,这就是“一次编写一次无处不在”的座右铭的来源。


推荐