所以我正在学习java,我有一个问题.看起来这些类型int
,boolean
并且string
几乎float
可以满足我在变量方面所需要的一切,除非在数字中需要十进制数字时可以使用.
我的问题是,其他类型的如long
,double
,byte
,char
等曾经在正常的日常编程中使用?可以使用哪些实用的东西?他们存在什么?
可能除了"短"之外,可能有点浪费空间 - 有时字面上,它们都是课程的马匹:
当你不需要分数而你没有理由使用其他任何东西时,请使用int ; 在大多数处理器/操作系统配置中,这是机器可以最有效地处理的数量的大小;
当你需要小数时你可以使用双,你没有理由使用其他任何东西;
想要表示字符时使用char(或者可能是需要双字节无符号算术的罕见情况);
使用一个字节,如果不是你特别需要操纵签署字节,或者当你需要围绕移动(罕见!)块的字节;
当需要简单的"是/否"标志时,请使用布尔值 ;
在需要整数的情况下使用long,但幅度可能超过20亿(文件大小,以毫秒/纳秒为单位的时间测量,用于将多个数据压缩成单个数字的高级用途);
对于那些罕见的情况,请使用浮点数,您可以(a)存储大量数据并节省内存,或者(b)执行大量计算,并且可以承受精度损失.对于大多数应用程序来说,"浮动"提供的精度非常差,但操作速度可能是原来的两倍 - 但值得在您的处理器上进行测试,发现实际情况就是如此![*]
如果你真的需要2字节有符号算术,请使用短路.案件并不多......
[*]例如,在Pentium架构上的Hotspot中,除了除法之外,f loat和double操作通常需要完全相同的时间.
除非你真的理解它们,否则不要陷入这些类型的内存使用中.例如:
每个对象大小在Hotspot中舍入为16个字节,因此具有单个字节字段的对象将占用与具有长字段或双字段的单个对象完全相同的空间;
当将参数传递给方法时,每个类型在堆栈上占用4或8个字节:您不会通过将方法参数从例如int更改为short来保存任何内容!(我见过人们这样做......)
显然,有一些API调用(例如,由于某种原因需要浮点运算的非CPU密集型任务的各种调用),你只需要传递它要求的类型......!
请注意,String不是基本类型,因此它实际上不属于此列表.
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语言规范.