Java中long,double,byte,char的目的是什么?

时间:2009-01-06 09:27:19

标签: java variables types language-features

所以我正在学习java,我有一个问题。似乎intbooleanstring类型几乎可以满足我在变量方面所需的一切,除非float可能会在数字中需要十进制数字。

我的问题是,longdoublebytechar等其他类型是否曾在常规日常编程中使用?可以使用哪些实用的东西?他们存在什么?

7 个答案:

答案 0 :(得分:114)

可能除了“短”之外,这可能有点浪费空间 - 有时字面上,它们都是课程的马匹:

  • 当您不需要小数时,请使用 int ,而您没有理由使用其他任何内容;在大多数处理器/操作系统配置中,这是机器可以最有效地处理的数量大小;
  • 当您需要小数时,请使用 double ,而您没有理由使用其他任何内容;
  • 如果要表示字符(或者可能需要双字节无符号算术的情况很少),请使用 char ;
  • 如果您特别需要操作签名字节(罕见!),或者需要移动,请使用字节 > of bytes;
  • 当您需要简单的“是/否”标志时,请使用布尔;
  • 在需要整数的情况下使用,但幅度可能超过20亿(文件大小,以毫秒/纳秒为单位的时间测量,在高级用途中压缩几个数据成单个数字);
  • 使用 float 来处理这些罕见的情况,您可以(a)存储巨大数量,并且节省内存是值得的,或者(b)正在执行大量的计算,可以承受精度损失。对于大多数应用程序来说,“浮动”提供的精度非常差,但操作速度可能是原来的两倍 - 但值得在您的处理器上进行测试,发现实际情况就是如此! [*]
  • 如果您确实需要2字节有符号算术,请使用。案件并不多......

[*]例如,在Pentium架构上的Hotspot中,f loat and double operations generally take exactly the same time,除了除法。

除非真的理解它,否则不要陷入这些类型的内存使用中。例如:

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

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

请注意,String不是基本类型,因此它实际上不属于此列表。

答案 1 :(得分:18)

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

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

一个double的大小是float的两倍,所以你通常会使用double而不是float,除非你对size或speed有一些限制并且float有足够的容量。

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

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

有关这些详细信息的真正授权来源,请查看java language specification

答案 2 :(得分:3)

您可以查看有关Java中基本类型的here

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

想象一下,你在大型结构(数组,矩阵......)上工作,那么你最好处理你正在使用的类型,以减少内存使用。

答案 3 :(得分:3)

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

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

2)它们可以为代码添加一些清晰度(例如,如果您使用char,那么阅读代码的任何人都知道您打算在其中存储的内容)。

3)他们可以节省内存。如果你有一大堆数字,所有数字都是无符号且低于256,你可以将它声明为一个字节数组,与你声明一个int数组相比,可以节省一些内存。

4)如果您需要存储的数字大于2 ^ 32,则需要很长时间,对于非常大的浮点数,需要加倍。

答案 4 :(得分:0)

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

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

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

我需要“小的”用于数据库和流操作。

答案 5 :(得分:0)

一般情况下,

整数应该用于数字 双打是用于表示小数的基本数据类型 字符串基本上可以包含任何数据类型,但使用整数更容易,并且除了文本外,使用字符串会让人感到困惑。
Chars 仅在您希望保留一个字母时使用,但它们基本上只是为了清晰起见 短裤,长片和花车可能没有必要,但如果你是,例如,创建一个大小为1,00000的数组,只需要保存少于1,000的数字,那么你会想要使用短裤,只是为了节省空间。

答案 6 :(得分:-1)

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

See this link以获得答案