1.2.7 可移植性
与c和c++不同,java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关运算都做了明确的说明。
例如,java中的int永远为32位的整数,而在c/c++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制
只
是int类型的大小不能低于short int,并且不能高于long int。在java中,数据类型具有固定的大小,这消除了代码移植时令人头痛的主要问
题。二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串是用标准的unicode格式存储的。
作为系统组成部分的类库,定义了可移植的接口。例如,有一个抽象的window类,并给出了在unix、windows和macintosh环境下的不同实现。
选择window类作为例子可能并不太合适。凡是尝试过的人都知道,要编写一个在windows、macintosh和10种不同风格的unix上看起来都不错的
程
序有多么困难。java 1.0就尝试着做了这么一个壮举,发布了一个将常用的用户界面元素映射到不同平台上的简单工具包。遗憾的是,花费了
大量的心血,却构建了一个在各个平台上都难以让人接受的库。原先的用户界面工具包已经重写,而且后来又再次重写,不过跨平台的可移植
性
仍然是个问题。
不过,除了与用户界面有关的部分外,所有其他java库都能很好地支持平台独立性。你可以处理文件、正则表达式、xml、日期和时间、数据
库、网络连接、线程等,而不用操心底层操作系统。不仅程序是可移植的,java api往往也比原生api质量更高。