java在各种操作系统平台提供不同的jre,然后就可以“一次编写,到处运行”了。不过用c不是也一样,只要对不同的平台编译成不同的代码不久完了。那何必要发明一种新东西呢?还设计出虚拟机,栈式机器,又慢。用c的话,自己的程序编译成相关平台的又不费事,别人的库又不用自己编译,直接下载别人编译好的适合自己平台的东西不就行了。除非是这种情况:比如十个公司,需要把自己的东西编译到3个平台上,这样一共需要编译30次。如果sun把这个工作做了,sun提供3个gre,这10个公司就不用做了,加起来一共13次,是因为这样能省时间吗?

解决方案 »

  1.   

    java只需要编译一次就可以了。
      

  2.   

    java在10个平台上,只编译一次。c在10个平台上要编译10次。
      

  3.   

    呵呵,不能说c不好,也不能说java怎么好!在不同的方面各有千秋!
      

  4.   

    这是java的优点,程序不用任何修改,就可以在windows和unix上通用。
    微软的c#一直被java压制,主要就是不能unix上使用,而且开发功能上也不占优势。
      

  5.   

    java的所谓一次编译,到处运行,也是对于同一个版本的jre而言的,比如你用1.5版本编译出来的,在1.4版本的就不一定能运行了(jre包括jvm以及运行时的类库)。但是,就同一个版本的jre而言,java的确做到一次编译,到处运行。因为java编译出来的并不是具体某个平台的二进制指令,而是一种伪代码,jre就是在运行java程序的时候,把这些伪代码解析为具体某个平台的二进制指令。计算机只认识二进制,这点大家都知道的,对于不同的平台,每条指令的二进制代码不一定相同,比如move指令,windows下可能010,而unix下可能是001。java编译出来的并不是具体的010或001,而是一种可以让jre解释为010或001的伪代码。而C呢,编译出来的就直接是010或001这样的二进制指令了,所以假如你把windows下编译好的C代码拿到unix下运行,unix在遇到010时不会认为它是move指令,可能把它当作push指令(假设unix下010是push指令),这样windows下编译出来的代码就不能在unix下正常被执行。所以,C是做不到编译一次,到处运行的。但是LZ所说的,C在一个平台下编译一次,在多个相同的平台下到处运行,这是可以的。这个应该每种语言基本都能做得到。用c的话,自己的程序编译成相关平台的又不费事,别人的库又不用自己编译,直接下载别人编译好的适合自己平台的东西不就行了。 
    -------------------------------------
    不同的平台下,C的编译器也可能不同,C的lib,头文件等等也不同,那么,相同的程序就不一定能在不同的平台下编译,有可能需要改代码,否则就不存在移植这样的说法了。精通C的人,可能什么都能做,但是精通java的人,可能就只能做java。java只能做到jre提供的能力范围,超越jre的范围,java是做不到的(也没必要做到,否则jre就没意义了),就好像Linux的内核是用C写,java的虚拟机也是用C写的,这点java就做不到了。
      

  6.   

    如果你经常做Linux平台下的C开发,这个问题就不会这么理直气壮了,嘿嘿