为什么Java和C++;不同? 例如,java中的实数取8字节,而C++中只需4字节。同样,对于字符,java需要2字节,C++只占用1字节。为什么它们大小不同?

为什么Java和C++;不同? 例如,java中的实数取8字节,而C++中只需4字节。同样,对于字符,java需要2字节,C++只占用1字节。为什么它们大小不同?,java,c++,types,primitive-types,Java,C++,Types,Primitive Types,你说的不是真的。C和C++没有固定大小的类型(除了在 STNDRT.H./CUT>中指定的那些)之外。 如果你没有从那句话中得到答案,这里有一个明确的答案: “java”包含固定大小的数据类型,而C和C++中的所有基本数据类型依赖于实际平台(机器体系结构+操作系统),程序被编译为“”,只是设计的语言选择使用不同的默认表示。没有比这更复杂的了 例如,Java中char的大小是由于希望使用16位unicode字符(需要2个字节)而产生的。这是一个平衡了许多权衡的设计决策: 他们本可以使用8位字符(

你说的不是真的。C和C++没有固定大小的类型(除了在<代码> STNDRT.H./CUT>中指定的那些)之外。 如果你没有从那句话中得到答案,这里有一个明确的答案:


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

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

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

  • 他们本可以使用8位字符(如C/C++中的字符),但大量有用的unicode字符无法放入单个字符中
  • 他们本可以使用32位字符来允许将来使用更多字符(预期)。但这样一来,大部分的时间都会被浪费掉

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

c++取决于平台。例如,-int的大小为-32位或64位,这取决于您的计算机有多新

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

< P> C++类型的大小不是一成不变的。标准规定(3.9.1 基本类型):

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

在那之后:

有五种标准的带符号整数类型:“带符号字符”、“短字符” int、int、long int和long int 长整型”。在此列表中,每种类型提供的存储空间至少与列表中其前面的类型相同

有三种浮点类型:浮点型、双精度型和长双精度型。 类型double提供的精度至少与float相同,而 类型long double提供的精度至少与double相同


如您所见,没有精确的值。

< P> C和C++没有定义很多类型的大小,但通常代码<浮点< /C> >是4字节,就像java和<代码>双< /> > 8字节,就像java一样。C没有标准的字节类型

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

这里的区别是C是设计的,您只需要支持7位ASCII。Java是在16位字符似乎足够的时候设计的。讽刺的是,Unicode并没有超过65535,所以Java现在也支持使用多个
char
s的代码点

对于字符,java需要2字节,C++只占用1字节。 因为标准是这么说的

为了

Java 2平台在字符数组和字符串和字符串中使用UTF-16表示 StringBuffer类

为了

sizeof(char)、sizeof(signed char)和sizeof(unsigned char)为1


第一,C++中的实际大小是依赖于实现的 (在大多数情况下,

char
有9位的实现) 支持两种语言、
float
double
的平台 C++和java的大小完全一样。

至于
char
,Java类型
char
或多或少地对应于 C++中的代码> W查尔特特< /代码>;从逻辑上讲,在大多数平台上应该是4字节,但是 由于各种历史原因,在Windows、AIX和Windows上只有2个字节 在Java运行时环境中


java没有真正的等价于C++ <代码> char < /C> >类型。

>我没有意识到C++可以处理“实数”。我认为他指的是<代码>实际< /COD> >代码>浮点< /代码>。@克里斯,因为他在谈论字节,我会引用这个,因为<代码> siZeof 不会以8位字节返回大小。@ LeTyMeYbe,好点。它真的在那里。标准谢谢你的回答。我很感激。所以,对于用Java和C/C++开发的两个相同的程序,如果Java中的数据类型大小是固定的,这是否意味着Java在执行程序时比C/C++程序需要更多的内存?@ParanoidAndroid一般说来是的,但不是因为这个原因。@谢谢您的回答。那么,这是因为架构和平台吗?如果这是原因,我能说Java上的数据类型是固定的,无论平台和体系结构如何,而C/C++取决于编译和运行程序的体系结构和平台吗?我怀疑Java选择Unicode的16位并不是基于可能的内存浪费,但是,当Java标准化时,Unicode只有16位,这个答案是错误的。另外,它并没有真正回答这个问题(因为它只解释了Java方面)。感谢所有有价值的答案。我真的很感激。那么,对于爪哇和C++中开发的两个相同的程序,它意味着java在执行程序时需要比C++程序更多的内存吗?在检查java与C++相比的数据类型大小时,java需要更多的字节来进行字符串数据类型(字母数+ 2字节),C++需要的是字母数+ 1字节。但是<代码> siZeof(1)< /代码>仍然没有说有多少位。我知道一些实现中,

char
是9位的,我也听说过一些实现中它是32位的(以及除了
lon以外的所有整数类型)