java的所谓一次编译,到处运行

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的lib,头文件等等也不同,那么,相同的程序就不一定能在不同的平台下编译,有可能需要改代码,否则就不存在移植这样的说法了。

精通C的人,可能什么都能做,但是精通java的人,可能就只能做java。java只能做到jre提供的能力范围,超越jre的范围,java是做不到的(也没必要做到,否则jre就没意义了),就好像Linux的内核是用C写,java的虚拟机也是用C写的,这点java就做不到了。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值