后记:可移植性是Java最引以为傲的地方, 编写一次,处处运行,但是C语言在诞生的时候也是以可移植性著称,但这种移植性是代码的可移植性, 不是程序的可移植性,比方说吧, hello.c 可以在windows上编译运行, 也可以在Linux上编译运行, 完全不用修改代码。当然,hello.c只是个非常简单的程序,像Windows、Linux上都有它的编译器和标准程序库, 那肯定可以移植了, 要是使用了系统平台的接口,就不好办了,就得针对每个平台写一套代码,然后用条件编译的方式来做。
C语言生来就是做系统级编程的,就是要贴近硬件,追求性能和效率,所以不能有虚拟机这样的抽象层,在虚拟机上运行,对程序员写代码非常友好,但是想要操作底层,需要用JNI这样的技术,也挺麻烦的。
C语言为了形成一个在机器上直接运行的可执行文件,需要一个链接的过程,而Java的class文件,因为可以在运行期链接,所以只要编译时能通过就可以了。