书上说java确定了每种基本类型所站的存储空间的大小,不像其他语言那样随着应硬件更结构的变化而变化,这是java程序更具可移植性的原因之一。
我不太理解这个,随着硬件结构变化的不是更具可移植性么?在不同的机器上分配自己合适的空间。为啥java更具有可移植性呢?谢谢回答!!

解决方案 »

  1.   

    Java语言对不同平台采用了完全统一的语言文本。比如基本数据类型不会随机器结构不同而发生改变,整数总是32位,长整数总是64位。而C,C++随着机器的编译变化而有所不同Java系统提供的类库,可以访问不同平台的基本操作系统。因此可以支持Java在任意平台上使用
      

  2.   

    比如一个c程序是在64位机器上开发的,申请一块int的内存为64位
    int *i = malloc(64);  //估计不太对,好久不看c了
    那么这句在32位机器上是会异常的。
      

  3.   

    其他语言不会随着硬件结构的变化而变化,如果是这样,c c++也具有可移植性了,
    java会随着硬件的变化,自己不会变化,该占多少位还是多少位,这一切jvm都弄好了,jvm把问题处理调了,所以具有可移植性。
      

  4.   

    JAVA中,内存分配其实是通过虚拟机控制的,也就是说,在真正得操作系统和你的JAVA程序中,实际上隔着一层JAVA虚拟机,如果你是设计者,在机器A为int分配16位,运行正常(这里强调,JAVA运行是在JAVA虚拟机中跑的),在机器B,如果你为int分配32位,同样在虚拟机上跑,你能确保一定能跑吗?既然JAVA虚拟机肯定能跑16位的,换了环境,确保平台无关,就应该在任何时候,都是16位,这样才能确保啊(实际上JAVA中得int是32位)
      

  5.   

    java编译之后生成的是字节码文件,而java运行执行程序的时候是靠java的虚拟机来解释字节码文件来完成的,所以对于不同的硬件,或者不同的平台,字节码文件与虚拟机都是一样的,所有可移植性很强
      

  6.   

    java编译之后生成的是字节码文件,而java运行执行程序的时候是靠java的虚拟机来解释字节码文件来完成的,所以对于不同的硬件,或者不同的平台,字节码文件与虚拟机都是一样的,所有可移植性很强
      

  7.   

    在Java的JVM里面,这些都已经定义好了,可移植性的前提是,JVM的存在,所以不管是什么OS和硬件,只要有vm,这些东西都固化了.而且你也看到java有64位版
      

  8.   


    你可能看错了,Java 只确定了基本类型值的范围,并没明确定必须占用内存的多少空间。JVM 规范并不有规定 JVM 的实现厂商各种基本类型必须占用多少字节,具体的由 JVM 厂商根据不同的硬件平台和其他因素决定。
      

  9.   

    JVM 规范并不有没有…… 老打错字
      

  10.   

    我怎么觉得大小应该是随硬件变化的,
    之所以夸平台是因为JVM,靠那些native之类的实现
      

  11.   

    是不是就是java根本不管人家机器是怎么弄的,它只管用它的那一套?
      

  12.   

    基本上是,只要人家机器上有java虚拟机(即JVM)。由于java虚拟机的存在,导致java程序一次编译,到处运行。Java文件被编译成字节码,然后再由操作系统平台对应的Java虚拟机解释运行(不同的操作系统有各自的Java虚拟机),相当于针对不同平台Java虚拟机为Java程序提供了一个统一的接口。