我正在学习Java,有个问题。似乎类型int
、boolean
和string
可以涵盖我在变量方面所需的几乎所有内容,除了在数字中需要小数时,可能需要使用float
。
我的问题是,其他类型如long
、double
、byte
、char
等是否在正常的日常编程中使用?这些类型有哪些实际的用途?它们存在的目的是什么?
我正在学习Java,有个问题。似乎类型int
、boolean
和string
可以涵盖我在变量方面所需的几乎所有内容,除了在数字中需要小数时,可能需要使用float
。
我的问题是,其他类型如long
、double
、byte
、char
等是否在正常的日常编程中使用?这些类型有哪些实际的用途?它们存在的目的是什么?
除了可能是有点浪费空间的"short"外,它们都各有所长:
[*] 例如,在Pentium架构中的Hotspot上,float和double操作通常需要完全相同的时间,除了除法之外。
不要过于纠结这些类型的内存使用,除非你真的理解它。例如:
显然,某些API调用(例如对于某些原因需要浮点数的非CPU密集型任务的各种调用)必须按照其要求传递类型...!
请注意,String 不是基本类型,因此它不属于此列表。
byte
和short
原语的唯一优点是编译器允许它们直接存储在byte[]
和short[]
数组中,而不需要类型转换。还有其他优点吗? - supercatJava中的int类型是32位,而long类型是64位,因此当您需要表示大于2^31的整数时,可以使用long类型。典型的使用long类型的示例是System.currentTimeMillis()。
字节是8位,是现代大多数硬件上可寻址的最小实体,因此在从文件读取二进制数据时需要使用它。
double类型的大小是float类型的两倍,因此通常会使用double类型而不是float类型,除非您有一些大小或速度方面的限制,并且float类型具有足够的容量。
short类型为2个字节,即16位。在我看来,这是最不必要的数据类型,我在实际代码中并没有真正看到它的使用,但是它可能用于读取二进制文件格式或执行低级网络协议。例如IP端口号是16位。
char类型表示单个字符,其大小为16位。这与short类型的大小相同,但是short类型为有符号的(-32768到32767),而char类型为无符号的(0到65535)。 (这意味着IP端口号可能比short类型更正确地表示为char类型,但这似乎超出了char类型的预期范围...)
有关这些详细信息的真正权威来源,请参见Java语言规范。
关于Java中的原始类型,您可以在这里查看。
这些类型之间的主要区别在于内存使用。例如,int使用32位,而byte只使用8位。
想象一下,如果您在处理大型结构(如数组、矩阵等),那么最好注意您正在使用的类型,以便减少内存使用。
整数通常用于表示数字。
双精度浮点数是用来表示小数的基本数据类型。
字符串可以存储任何数据类型,但最好仅使用整数,除非是要表示文本内容以外,否则会很容易混淆。
字符仅用于存储单个字母,虽然它们本质上只是为了明确表达意思而存在。
短整型、长整型和浮点数可能并不一定需要,但如果您需要创建一个大小为1,00000的数组,且该数组仅需要存储小于1,000的数字,则最好使用短整型,以便节省空间。
这与你处理的数据有关。当你只处理少量数据时,使用保留大部分内存的数据类型是没有意义的。例如,许多数据类型在使用之前就会预留内存。以数组为例,即使你只使用其中的4个字节,它们也会默认保留一定数量的内存(比如256字节<--仅为示例!)。
请查看此链接获取答案