47

所以我正在学习java,我有一个问题。似乎 types int,booleanstring几乎适用于我在变量方面需要的所有东西,除了float在数字中需要十进制数字时可能会使用。

我的问题是,在日常编程中是否曾经使用过其他类型,例如long, double,等?这些可以用于哪些实际的事情?他们存在是为了什么?bytechar

4

7 回答 7

116

除了“短”可能是个例外,这可以说有点浪费空间——有时从字面上看,它们都是课程的马:

  • 当您不需要小数并且没有理由使用其他任何东西时,请使用int ;在大多数处理器/操作系统配置上,这是机器可以最有效地处理的数字大小;
  • 当您需要小数并且没有理由使用其他任何东西时,请使用双精度数;
  • 当你想表示一个字符时使用char (或者可能需要两字节无符号算术的罕见情况);
  • 如果您特别需要操作有符号字节很少见!),或者当您需要移动一个字节时,请使用一个字节;
  • 当您需要一个简单的“是/否”标志时使用布尔值;
  • 在需要整数但量级可能超过 20 亿的情况下使用long (文件大小,以毫秒/纳秒为单位的时间测量,用于将多条数据压缩为单个数字的高级用途);
  • 在极少数情况下使用浮点数,您 (a) 存储大量它们并且节省内存是值得的,或者 (b) 正在执行大量计算,并且可以承受精度损失。对于大多数应用程序,“float”提供的精度很差,但运算速度可能快两倍——不过,值得在您的处理器上进行测试,以发现它确实如此![*]
  • 如果您确实需要 2 字节有符号算术,请使用short 。没有那么多案例...

[*] 例如,在 Pentium 架构上的 Hotspot 中,浮点运算和双精度运算通常需要完全相同的时间,但除法除外。

除非您真正了解它,否则不要太纠结于这些类型的内存使用情况。例如:

  • 在 Hotspot 中,每个对象大小都舍入为 16 个字节,因此具有单字节字段的对象将与具有长或双字段的单个对象占用完全相同的空间;
  • 将参数传递给方法时,每种类型在堆栈上占用 4 或 8 个字节:您不会通过将方法参数从 int 更改为 short 来保存任何内容!(我见过人们这样做......)

显然,有某些 API 调用(例如,对非 CPU 密集型任务的各种调用,由于某种原因需要浮点数),您只需将它要求的类型传递给它......!

请注意,String 不是原始类型,因此它并不真正属于此列表。

于 2009-01-06T13:57:53.197 回答
19

java int 是 32 位,而 long 是 64 位,所以当您需要表示大于 2^31 的整数时,long 是您的朋友。long 的典型使用示例,参见 System.currentTimeMillis()

一个字节是 8 位,是大多数现代硬件上最小的可寻址实体,因此在从文件中读取二进制数据时需要它。

double 的大小是 float 的两倍,因此您通常会使用 double 而不是 float,除非您对大小或速度有一些限制并且 float 有足够的容量。

短是两个字节,16 位。在我看来,这是最不需要的数据类型,我还没有在实际代码中真正看到过,但同样,它可能对读取二进制文件格式或执行低级网络协议很有用。例如 ip 端口号是 16 位的。

Char 表示单个字符,为 16 位。这与 short 大小相同,但 short 是有符号的(-32768 到 32767),而 char 是无符号的(0 到 65535)。(这意味着 ip 端口号可能更正确地表示为字符而不是短字符,但这似乎超出了字符的预期范围......)

有关这些细节的真正权威来源,请参阅java 语言规范

于 2009-01-06T09:37:52.067 回答
3

您可以在这里查看 Java 中的原始类型。

这些类型之间的主要兴趣是内存使用情况。例如,int使用 32 位,而byte仅使用 8 位。

想象一下,您处理大型结构(数组、矩阵......),那么您将更好地处理您正在使用的类型以减少内存使用。

于 2009-01-06T09:33:15.213 回答
3

我想这种类型有几个目的:

1)它们对可以存储在其中的变量的大小(和符号)施加限制。

2) 他们可以为代码增加一点清晰度(例如,如果您使用字符,那么任何阅读代码的人都知道您打算在其中存储什么)。

3)他们可以节省内存。如果您有大量的数字数组,所有这些数字都将是无符号的并且小于 256,您可以将其声明为字节数组,与声明整数数组相比,可以节省一些内存。

4)如果您需要存储的数字大于 2^32,则需要 long,对于非常大的浮点数,则需要 double。

于 2009-01-06T09:35:20.263 回答
0

原始数据类型是必需的,因为它们是每个复杂集合的基础。

如果您只需要一个小整数(或其他),则使用 long、double、byte 等,这不会浪费您的堆空间。

我知道,我们这个时代有足够的内存,但你不应该浪费它。

我需要“小”来进行数据库和流操作。

于 2009-01-06T09:32:04.857 回答
0

一般来说,整数应该用于数字。
双精度数是用于表示小数的基本数据类型。
字符串基本上可以保存任何数据类型,但使用整数更容易,并且使用字符串(文本除外)会令人困惑。当您只想保留一个字母时使用字符,尽管它们本质上只是为了清楚起见

Shorts、longs 和 floats可能不是必需的,但例如,如果您要创建一个大小为 1,00000 的数组,它只需要保存小于 1,000 的数字,那么您会想要使用 shorts,只是为了节省空间。

于 2016-12-15T19:56:48.707 回答
-1

它与您正在处理的数据有关。当您只处理少量数据时,使用保留大部分内存的数据类型是没有意义的。例如,许多数据类型在使用之前就保留了内存。以数组为例,即使您只使用其中的 4 个字节,它们也会保留默认数量(例如,256 字节 <-- 一个示例!)。

请参阅此链接以获得您的答案

于 2009-01-06T09:32:14.810 回答