当前位置: 首页 > 知识库问答 >
问题:

Java中的原始数据类型和可移植性

司寇照
2023-03-14

我引用Herbert Schildt第3章数据类型、变量和数组:

基元类型表示单个值,而不是复杂的对象。虽然Java在其他方面是完全面向对象的,但基元类型不是。这种效率的原因。制作基元类型会使性能降低太多。

基元类型被定义为具有显式范围和数学行为。像C、C++这样的语言允许整数的大小根据执行环境的指令而变化。然而,Java不同。由于Java的可移植性要求,所有数据类型都有一个强定义的范围。例如,int始终是32位的,而不考虑特定的平台。这允许编写保证不在任何机器体系结构上移植就能运行的程序。虽然严格指定整数的大小在某些环境中可能会导致性能的少量损失,但为了实现可移植性,这是必要的。

共有1个答案

束俊材
2023-03-14

在“低级”语言中,基元数据类型的大小通常来自CPU处理它们的能力。例如,在c语言中,int被定义为“大小至少为16位”,但其大小在不同的体系结构之间可能不同,以确保“int类型应该是目标处理器最有效地使用的整数类型”。(资料来源)。这意味着,如果您的代码对int的大小做了粗心的假设,那么如果您将其从32位x86移植到64位PowerPC,它很可能会中断。

如上所述,java是不同的。例如,int将始终是32位。这意味着当您在不同的体系结构上运行相同的代码时,您不必担心它的大小会发生变化。正如上面提到的,折衷是性能--在任何本机不处理32位计算的体系结构上,这些int需要扩展到CPU能够处理的本机大小(这会有很小的损失),或者更糟的是,如果CPU只能处理更小的int,则对int的每个操作可能需要多个CPU操作。

 类似资料:
  • 问题内容: 我是Kotlin的新手,正在玩数据类型。我选择了一个类型,然后尝试通过说来将其强制转换为a ,这在Java中是有效的(从语法上讲,但这是正确的)。但是,此操作失败,表示无法将Int强制转换为Double。我假设这是因为它是基于Integer类而不是原始的int数据类型构建的。我是正确的,最有价值的方法是什么?有一个功能,但这似乎效率低下且笨拙。 问题答案: 我花了一个类型,然后试图将它

  • 问题:我无法存储号码“600851475143”。我意识到这个数字比int所能容纳的要大,比最大long值要小。然而,我的程序没有把变量“number”注册成一个long,而是注册成一个int。有人能解释一下这个问题吗? **-问题线 } 解决方案:正如吉姆在下面所说,为了长型,必须在数字末尾加上“L”或“L”。“如果整数文字以字母L或L结尾,则为long类型;否则为int类型。建议使用大写字母L

  • 我是科特林的新手,我在玩数据类型。我取了一个<code>Int</code>类型,然后尝试将其转换为<code>Double</code>,将<code>num表示为Double>/code,这是一个在java中有效的调用(非语法上,但你明白了)。然而,这失败了,表示Int不能强制转换为Double。我假设这是因为它是基于Integer类而不是原始int数据类型构建的。我说得对吗?什么是最有效的价

  • 我试着搜索像Multi-raw类型的东西,但我没有找到任何东西。 我该怎么做?

  • 是否可以只使用一行代码就将输入变量的数据类型(可以是任何基元类型,int、bool、float、double)作为字符串返回?我知道对于字符串类型,使用和可以很容易地做到这一点,但我不确定如何使用这些方法返回基元类型的类型。我还想保持我的代码非常简短,最好只用一行。 我到处找了找,找不到任何地方,这个问题已经以我要求的方式得到了回答。

  • 问题内容: 如果有Wrapper类使Java成为纯面向对象的语言,那么为什么会有可在Java中使用的Primitive数据类型呢? 问题答案: 为了效率。基本类型的变量直接包含值。非基本类型的变量是引用,引用存储在内存中其他位置的对象。 每次您需要使用包装器类型的值时,JVM都需要在内存中查找对象以获取该值。对于原始类型,这不是必需的,因为变量本身包含值,而不是对包含该值的对象的引用。 但是,这不