再回首,Java温故知新(三):Java基本数据类型之整型

  注:因为此次学习打算看一遍相关Java源码,所以更新速度一开始会相对慢一些。还有就是不得不佩服那群大牛啊,算法不是一时半会能懂的,本来打算直接弄懂的,后来感觉这样效率太低了,所以决定大体上通读一遍,反正以后肯定还会回来再次学习。

  Java作为一种强类型语言,意味着每一个变量都会有特定的类型,Java共有8种基本类型,其中有4种整型(byte、short、int、long)、两种浮点型(float、double)、1种字符型(char)和一种布尔型(boolean),值得注意的是,虽然字符串String非常常用,但是它却不属于基本类型。

  一、整型

  整型在表示没有小数部分的数值,允许负数(Java中没有无符号类型,即unsigned),计算机中的存储信息的最小单位是位(bit),存储容量的基本计量单位是字节(Byte),一个字节占8个位,整型数据的取值范围根据其存储的位数计算,即2的N次方,例如byte类型占1个字节,占8个位,所以共有256个值,负数包括-128~-1,正数包括0~127。同理,整型数据的存储需求和取值范围如下:

类型 存储需求(字节) 取值范围
byte 1 -128 ~ 127
short 2 -32768 ~ 32767
int 4 约等于-21亿 ~ 21亿
long 8 正常使用中不太可能溢出,范围约为-92亿亿 ~ 92亿亿

  另外在程序中处理整型数据时可能会用到各种类型的写法,以下列出几种常用的:

写法 含义 备注
12345 十进制 与书面相同
12345L 十进制,长整型(long) 如果数值大于int型数据的最大值却没有加L,会报错
012345 八进制 不推荐,易混淆
0x12345 十六进制 二进制数据的另类表示法,便于书写和记忆
0b10010101 二进制 Java 7新加入的写法,之前版本不支持
1_000_000 字面量分割 与书面中1,000,000相同,Java 7新加入的写法,编译器会自动忽略下划线

   以下是在大体上略一遍源码时的疑问及解答:

 1.Integer.parseInt和Integer.valueOf有什么区别?

  parseInt返回的是int型数据,而valueOf返回的是Integer封装类型,后者可以调用Integer中的API进行其他操作。

 2.Integer.getInteger是干什么用的?

  在日常开发中接触较少,用来获取系统参数的,源码中调用System.getProperty(String key),然后使用decode进行解析

 3.Integer.decode和Integer.valueOf有什么区别

  前者可以解析0x,#等表示的其他进制,而后者只能转换十进制

 还需要注意的地方有,Byte和Short的compareTo是直接计算差值,即a-b,而Integer和Long的compareTo却是返回-1、0和1;Byte、Short、Integer的hashCode()为返回当前数值的int值,而Long类型的处理方法为return (int)(value ^ (value >>> 32));

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。