所以我正在学习java,我有一个问题。似乎 types int
,boolean
和string
几乎适用于我在变量方面需要的所有东西,除了float
在数字中需要十进制数字时可能会使用。
我的问题是,在日常编程中是否曾经使用过其他类型,例如long
, double
,等?这些可以用于哪些实际的事情?他们存在是为了什么?byte
char
所以我正在学习java,我有一个问题。似乎 types int
,boolean
和string
几乎适用于我在变量方面需要的所有东西,除了float
在数字中需要十进制数字时可能会使用。
我的问题是,在日常编程中是否曾经使用过其他类型,例如long
, double
,等?这些可以用于哪些实际的事情?他们存在是为了什么?byte
char
除了“短”可能是个例外,这可以说有点浪费空间——有时从字面上看,它们都是课程的马:
[*] 例如,在 Pentium 架构上的 Hotspot 中,浮点运算和双精度运算通常需要完全相同的时间,但除法除外。
除非您真正了解它,否则不要太纠结于这些类型的内存使用情况。例如:
显然,有某些 API 调用(例如,对非 CPU 密集型任务的各种调用,由于某种原因需要浮点数),您只需将它要求的类型传递给它......!
请注意,String 不是原始类型,因此它并不真正属于此列表。
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 语言规范。
您可以在这里查看 Java 中的原始类型。
这些类型之间的主要兴趣是内存使用情况。例如,int使用 32 位,而byte仅使用 8 位。
想象一下,您处理大型结构(数组、矩阵......),那么您将更好地处理您正在使用的类型以减少内存使用。
我想这种类型有几个目的:
1)它们对可以存储在其中的变量的大小(和符号)施加限制。
2) 他们可以为代码增加一点清晰度(例如,如果您使用字符,那么任何阅读代码的人都知道您打算在其中存储什么)。
3)他们可以节省内存。如果您有大量的数字数组,所有这些数字都将是无符号的并且小于 256,您可以将其声明为字节数组,与声明整数数组相比,可以节省一些内存。
4)如果您需要存储的数字大于 2^32,则需要 long,对于非常大的浮点数,则需要 double。
原始数据类型是必需的,因为它们是每个复杂集合的基础。
如果您只需要一个小整数(或其他),则使用 long、double、byte 等,这不会浪费您的堆空间。
我知道,我们这个时代有足够的内存,但你不应该浪费它。
我需要“小”来进行数据库和流操作。
一般来说,整数应该用于数字。
双精度数是用于表示小数的基本数据类型。
字符串基本上可以保存任何数据类型,但使用整数更容易,并且使用字符串(文本除外)会令人困惑。当您只想保留一个字母时使用字符,尽管它们本质上只是为了清楚起见
。
Shorts、longs 和 floats可能不是必需的,但例如,如果您要创建一个大小为 1,00000 的数组,它只需要保存小于 1,000 的数字,那么您会想要使用 shorts,只是为了节省空间。
它与您正在处理的数据有关。当您只处理少量数据时,使用保留大部分内存的数据类型是没有意义的。例如,许多数据类型在使用之前就保留了内存。以数组为例,即使您只使用其中的 4 个字节,它们也会保留默认数量(例如,256 字节 <-- 一个示例!)。
请参阅此链接以获得您的答案