Java中long,double,byte,char的用途是什么?
所以我正在学习java,我有一个问题。 似乎int
, boolean
和string
types对于我所需要的所有variables来说都是很好的,除非在数字中需要十进制数字的时候也可以使用float
。
我的问题是,其他types,如long
, double
, byte
, char
等常用,日常编程? 这些可以用来做些什么实际的事情? 他们为什么存在?
除了“短”,这可能是有点浪费空间 – 有时字面上,他们都是课程的马:
- 当你不需要小数的时候使用int ,你没有理由使用其他的东西; 在大多数处理器/操作系统configuration上,这是机器可以最有效处理的数量的大小;
- 当你需要小数时,使用双精度,你没有理由使用其他的东西;
- 当你想要表示一个字符时(或者在需要双字节无符号算术的情况下)使用一个字符 ;
- 使用一个字节,如果你特别需要操纵一个有符号的字节(罕见!),或者当你需要移动一个字节块 ;
- 当你需要一个简单的“是/否”标志时,使用布尔值 ;
- 在需要整数的情况下使用很长时间 ,但是数量可能超过20亿(文件大小,以毫秒/纳秒为单位的时间测量,以及将多个数据压缩为单个数字的高级用法)。
- 在以下情况下使用浮点数: (a)存储大量数据并节省内存,或者(b)执行大量的计算 ,并且可以承受精度上的损失。 对于大多数应用程序来说,“float”提供的精确度非常差,但是操作速度可能快一倍 – 但是在处理器上进行testing是值得的,但实际上却是这样! [*]
- 如果您确实需要2字节有符号的算术,请使用简写 。 没有那么多的情况
例如,在奔腾架构的Hotspot中,除了除法之外, 通常情况下,双精度和双精度操作几乎是一样的 。
除非你真的了解这些types,否则不要太在意这些types的内存使用。 例如:
- 在Hotspot中, 每个对象大小被舍入为16个字节 ,所以具有单字节字段的对象将占用与具有长字段或双字段的单个对象完全相同的空间;
- 当传递参数给一个方法时, 每一个types在堆栈上占用4或8个字节 :通过将一个方法参数从一个int改为short,你不会保存任何东西! (我见过这样的人…)
显然,有一些API调用(例如各种调用非CPU密集型任务,出于某种原因采取浮动),你只需要通过它要求的types…!
请注意,string不是原始types,所以它不属于这个列表。
java int是32位,而long是64位,所以当你需要表示大于2 ^ 31的整数时,long是你的朋友。 有关使用long的典型示例,请参阅System.currentTimeMillis()
一个字节是8位,是大多数现代硬件上最小的可寻址实体,所以在从文件中读取二进制数据时需要。
双精度浮点数是浮点数的两倍,所以通常使用双精度浮点数而不是浮点数,除非在大小或速度方面有一些限制,并且浮点数有足够的容量。
短是两个字节,16位。 在我看来,这是最不必要的数据types,在实际的代码中我还没有真正看到,但是对于读取二进制文件格式或者使用低级networking协议来说,这可能是有用的。 例如,IP端口号是16位。
Char代表一个字符,即16位。 这与短一样大小,但一个短符号(-32768到32767),而一个字符是无符号的(0到65535)。 (这意味着一个IP端口号可能是比字符更正确地表示为一个字符,但这似乎超出了字符的预期范围…)
对于这些细节的真正的源代码,请参阅java语言规范 。
您可以在这里查看Java中的基本types。
这些types之间的主要兴趣是内存使用情况。 例如, int使用32位,而字节只使用8位。
想象一下,你在大型结构(数组,matrix…)上工作,那么你会更好地照顾你正在使用的types,以减less内存的使用。
我猜这种types有几个目的:
1)他们对可以存储在其中的variables的大小(和符号)执行限制。
2)他们可以增加一点清晰度的代码(例如,如果你使用一个字符,那么读取代码的人知道你打算存储在其中)。
3)可以节省内存。 如果你有大量的数字,所有这些都将是无符号的,并且低于256,那么你可以声明它为一个字节数组,与存储一些内存相比,如果你声明了一个int数组。
4)如果需要存储的数字大于2 ^ 32,则需要很长的时间,而对于非常大的浮点数则需要两倍。
原始数据types是必需的,因为它们是每个复杂集合的基础。
长,双,字节等等,如果你只需要一个小的整数(或其他),不会浪费你的堆空间。
我知道,在我们这个时代有足够的RAM,但是你不应该浪费它。
我需要“小”的数据库和stream操作。
整数应该用于一般的数字。
双打是用来表示小数的基本数据types。
string基本上可以包含任何数据types,但使用整数更容易,除了文本以外,使用string会引起混淆。
当你只想保持一个字母时,就使用字符,虽然它们基本上只是为了清楚起见。
短裤,长裤和花车可能不是必需的,但是如果你是,例如,创build一个大小为100000的数组,只需要数字less于1000,那么你会想要使用短裤,只是为了节省空间。
这与你正在处理的数据有关。 使用仅在处理less量数据时保留大部分内存的数据types毫无意义。 例如,很多数据types在使用之前都会预留内存。 以数组为例,即使只使用了4个字节,他们也会保留一个默认值(比如,256字节< – 一个例子!)。
看到这个链接你的答案