我正在阅读Herbert Schildt的书“Java:The Complete Reference”,他在那里写道Java是可移植的,并且是架构中立的。这两个概念有什么区别?我从文中无法理解。
答案 0 :(得分:9)
便携式C程序:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Hello, World!");
return (EXIT_SUCCESS);
}
您可以使用该C程序并使用C编译器在任何计算机上编译它并使其正常工作(假设它支持printf ...我猜可能没有一些东西)。
如果您在Windows上编译它并尝试在Mac上运行该二进制文件它将无法正常工作。
用Java编写的同类程序也将在安装了Java编译器的任何机器上编译,但生成的.class文件也将在任何带有Java VM的机器上运行。这是建筑中立的部分。
因此,portable是一个源代码的想法,而架构中立是一个可执行的想法。
答案 1 :(得分:8)
看看这个white paper on Java。
基本上他们说除了在多个环境中运行(因为在JVM中被解释)之外,无论环境如何,它都运行相同。前者是便携式,后者是建筑中立的原因。例如,int的大小不会因平台而异;它是由JVM建立的。
答案 2 :(得分:2)
环顾四周,我发现另一本书描述了两者之间的区别。
对于体系结构中立,编译器将生成一个体系结构中立的目标文件,这意味着在存在Java运行时的情况下,编译的Java代码(字节码)可以在许多处理器上运行。
对于便携式,它意味着规范中没有与实现相关的方面。例如,在C ++中,int可以是16位,或32位,具体取决于谁在实现规范,而在Java中,int总是32位。
我从另一本书(Core Java 2:Fundamentals)中获取了我的信息,因此它可能与他的意思不同。这是一个链接:Core Java 2: Fundamentals
答案 3 :(得分:1)
在架构中立的情况下,本书意味着字节代码独立于运行程序的底层平台。例如,无论您的操作系统是32位还是64位,Java字节代码都完全相同。您不必为32位或64位重新编译Java源代码。 (因此,“架构”指的是CPU架构)。
“Portable”表示在一个操作系统上运行的程序可以在另一个操作系统上运行而无需进行任何更改。使用Java,您甚至不必重新编译源代码;例如,在Windows上编译的* .class文件适用于Linux,Mac OS X或任何其他可用Java虚拟机的操作系统。
请注意,您必须注意一些事情,以使您的Java代码真正可移植。例如,如果您在Java应用程序中硬编码Windows样式的文件路径(C:\ Users \ Myself ...),则它无法在其他操作系统上运行。
答案 4 :(得分:1)
我怀疑他意味着代码可以在许多平台上运行而无需重新编译。 也可以编写处理底层系统的代码而无需重写或条件。
E.g。可以在64位Linux系统上读取32位Windows系统中的序列化对象。
答案 5 :(得分:1)
java中有3个相关的功能。
答案 6 :(得分:0)
.class文件是可移植的,因为它可以在任何操作系统上运行。原因是,JVM生成的.class文件对于所有操作系统都是相同的。另一方面,JVM与OS不同,但它为所有操作系统生成相同的.class文件,因此JVM是架构中立的。
答案 7 :(得分:0)
Architecture Neutral和Portable之间有什么区别? 架构中立:Java是一种架构中立的编程语言,因为java允许其应用程序在一个硬件架构上编译并在另一个硬件架构上执行。 Portable:Java是一种可移植的编程语言,因为java能够执行其应用程序以及所有操作系统和所有硬件系统。
答案 8 :(得分:0)
就Java而言
Java体系结构中立 - 这里我们讨论操作系统体系结构,即java生成中间字节代码(二进制代码)(由JVM处理)并允许java代码在您拥有的任何操作系统上运行Java虚拟机可用(无论其OS体系结构如何处理内存分配,兑现,寄存器处理,位代码处理32位或64位,同时解释代码,如每个解释器逐行执行代码 - 这是由jvm处理的硬件和操作系统配置)。
便携式(通用意义,如可转让,平台无关,甚至在源代码方面都是固定的,即简单地意味着对许多人的支持)
Java Portable意味着在一台机器上编写java机器代码,并且可以在任何具有相对于O.S的适当JVM的机器上运行。