为什么Java和C ++中的数据类型大小不同?

时间:2012-08-02 09:43:22

标签: java c++ types primitive-types

例如,Java中的实数需要8个字节,而C ++中只需4个字节。类似地,对于字符,Java占用2个字节,但C ++只占用1个字节。为什么它们的大小不同?

7 个答案:

答案 0 :(得分:8)

你说的不是真的。 C和C ++没有任何固定大小的类型(除stdint.h中指定的类型外)。

如果你没有从那个陈述中得到回答,这里有一个明确的答案:

“有区别,因为Java包含固定大小的数据类型,而C和C ++中的所有基本数据类型都依赖于编译程序的实际平台(机器架构+操作系统)。”

答案 1 :(得分:3)

首先,虽然C ++中实际的类型大小是依赖于实现的 (并且存在char具有9位的实现) 支持这两种语言的平台floatdouble都有 C ++和Java中的大小完全相同。

对于char,Java类型char或多或少对应 C ++中的wchar_t;从逻辑上讲,它在大多数平台上应该是4个字节,但是 由于各种历史原因,它在Windows,AIX和Linux上只有2个字节 在Java运行时环境中。

Java与C ++ char类型没有实际等价。

答案 2 :(得分:1)

c ++依赖于平台。例如 - int将是字的大小 - 32位或64位,取决于您的计算机的新程度。

java更通用 - 它运行在一个定义大小的JVM上。与C#相同的情况。两者都不依赖于你拥有的操作系​​统和CPU。

答案 3 :(得分:1)

C ++类型的大小是而不是一成不变的。标准说(3.9.1 基本类型):

  

声明为字符(char)的对象应足够大以存储   实现的基本字符集中的任何成员。

之后:

  

有五种标准的有符号整数类型:“signed char”,“short”   int“,”int“,”long int“和”long“                      long int“。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间。

     

< ...>

     

有三种浮点类型:float,double和long double。   double类型提供至少与float一样多的精度   类型long double提供至少与double相同的精度。

如您所见,没有提到确切的值。

答案 4 :(得分:1)

C和C ++没有为许多类型定义大小,但通常float是4字节,就像在Java中一样,double是8字节,就像在Java中一样。 C没有标准字节类型。

C中的

char是一个字节,但不保证是有符号或无符号的。在Java中,它是2个字节,并保证签名以支持0到65535之间的字符。

这里的区别在于C被设计为你需要支持的7位ASCII。 Java是在16位字符看起来足够时设计的。具有讽刺意味的是,Unicode不会超过65535,因此Java现在支持使用多个char s

的代码点

答案 5 :(得分:0)

只是所设计的语言选择使用不同的默认表示。没有比这更复杂的了。

例如,Java中char的大小是由于希望使用16位unicode字符(需要2个字节)。这是一个平衡了许多权衡的设计决策:

  • 他们可以使用8位字符(如在C / C ++中),但是大量有用的unicode字符不适合单个字符。
  • 他们本来可以使用32位字符来允许更多的字符(期待UTF32)。但是,大部分时间都会浪费很多这些比特

请注意,Java中可以有一个4字节的浮点数 - 它叫float而不是double(8字节)

答案 6 :(得分:0)

  

对于字符,Java占用2个字节,但C ++只占用1个字节。

因为标准是这样说的。

java:

  

Java 2平台在char数组和String和中使用UTF-16表示   StringBuffer类。

C++:

  

sizeof(char),sizeof(signed char)和sizeof(unsigned char)为1;