大家好,欢迎来到IT知识分享网。
byte 是 Java 原始类型。byte类型简称“字节型”,用于表示整数。
int 是 Java 原始类型。 int类型简称“整型”,用于表示整数。
short是java原始类型。 short类型简称“短整型”,用于表示整数。
long是java原始类型。 long类型简称“长整型”,用于表示整数。
byte、short、int、long 的初始默认值皆为 0 。
1. 取值范围
(1) byte
- byte类型占1个字节,即8位,其中最高位为符号位。
所以,byte类型的取值范围为 −28 ~ 27−1
即 −128 ~ 127
(2) int
- int类型 占4个字节,即32位,其中最高位为符号位。
所以,int类型的整数取值范围为: −231 ~ 231−1
即 − ~ +
(3) short
- short类型占2个字节,即16位,其中最高位为符号位。
所以,short类型的整数取值范围为: −215 ~ 215−1
即 −32768 ~ +32767
(4) long
- long类型占8个字节,即64位,其中最高位为符号位。
所以,short类型的整数取值范围为: −263 ~ 263−1
即 − ~ +
2. 数据溢出
这里讨论的“数据溢出”是指数据超出所定义数据类型的范围。
先看 一段代码(代码1):
byte a=127; byte b=-128; System.out.println("a+1="+(a+1)); System.out.println("b+1="+(b-1));
运行结果为:
a+1=128
b-1=-129
再看另一段代码(代码2):
byte a=127; byte b=-128; System.out.println("(byte)(a+1)="+(byte)(a+1)); System.out.println("(byte)(b-1)="+(byte)(b-1));
运行结果为:
(byte)(a+1)=-128
(byte)(b-1)=127
- 讨论1:为什么代码1的运行结果能超出byte类型的取值范围?
因为在程序中,整数是默认为int类型的,即“1”是一个int类型的整数。当两个不同数据类型的数进行运算时,先将低级别的数据类型转换为高级别的数据类型后在进行运算。例如,一个byte类型的数与一个int类型的数相加,byte类型的数先转换成int类型,在进行相加,得出的结果也为int类型。但若为byte类型或short类型的数据运算后,不加强制转换,结果会为int类型。
数据类型级别:
byte–>short–>int–>long–>double<–float - 讨论2:为什么byte类型最小值不是-127(),而是-128?
整数在计算机中以原码的形式存在的,负数在计算机中是以其补码形式存在的,就是负数的绝对值的原码转为二进制再按位取反后加 1 。
我们先来看20与-20这个例子:20原码:0001 0100 它在计算机中的存储就是 0001 0100,-20 按照前面说的算,其绝对值为 20,转为二进制 ,0001 0100按位取反 1110 1011 再加 1 后:1110 1100,此为-20补码 ,好的,计算机中的1110 1100就是代表 -20 了。
再来看 -128:-128 绝对值为 128,转换为二进制,1000 0000 按位取反0111 1111 再加 1 后为1000 0000,此为 -128 的补码,因此计算机中1000 0000就可以代表 -128 了。(short、int、long 类型的取值范围也是这样计算) - 讨论3: 当数据溢出时数据是怎样变化的?
当二进制数的首位为 0 时,该数为正数;当二进制数的首位为 1 时,该数为负数。
下面以 byte 类型数据进行讨论,结果强制转换为 byte 类型:“127+1=128”,这样的计算在计算机中会发生溢出,得出的结果不会为 128,二是 -128 (如上面的代码 2)。其原因是:0111 1111 + 1 = 1000 0000 , 1000 0000 首位为 1 ,代表负数。因为 1000 0000是 -128 的补码,所以“127+1=-128“。
当溢出使得数据结果超过 8 位,则只取低 8 位进行计算:”127 + 256 = 383“ ,388 用二进制表示为 1 0111 1111 ,已经超过 8 为,所以只去低 8 位 0111 1111 。0111 1111 首位为 0 ,代表整数。因为 0111 1111 为 127,所以”127 + 256 = 127“。
(short、int、long 类型数据溢出后规律与 byte 类型一样)
三. int 与 Integer 的区别
(byte 与 Byte 、short 与 Short 、long 与 Long 的区别皆和 int 与 Integer 的区别类似)
int 是语言本身的最基本的类型,而 Integer 是基于 int 的一个包装类,它有属性及方法。
对于包装类说,这些类的用途主要包含两种:
a. 作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
b. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
Interger 在 java.lang 包中是这样定义的(代码3):
public Integer(int value) { throw new RuntimeException("Stub!"); }
因此在程序中创建一个 Integer 对象的方式为(代码4):
Integer in=new Integer(5);
- Integer 类中的字段、方法
字段摘要
类型 | 字段名 | 意义 |
---|---|---|
static int | MAX_VALUE | 保持 int 类型的最大值的常量可取的值为 231-1。 |
static int | MIN_VALUE | 保持 int 类型的最小值的常量可取的值为 -231。 |
static int | SIZE | 以二进制补码形式表示 int 值的位数。 |
static Class | TYPE | 表示基本类型 int 的 Class 实例。 |
方法摘要
返回值类型 | 方法名(参数) | 作用 |
---|---|---|
static int | bitCount(int i) | 返回指定 int 值的二进制补码表示形式的 1 位的数量。 |
byte | byteValue() | 以 byte 类型返回该 Integer 的值 |
int | compareTo(Integer anotherInteger) | 在数字上比较两个 Integer 对象。 |
static Integer | decode(String nm) | 将 String 解码为 Integer。 |
double | doubleValue() | 以 double 类型返回该 Integer 的值。 |
boolean | equals(Object obj) | 比较此对象与指定对象。 |
float | floatValue() | 以 float 类型返回该 Integer 的值。 |
static Integer | getInteger(String nm) | 确定具有指定名称的系统属性的整数值。 |
static Integer | getInteger(String nm, int val) | 定具有指定名称的系统属性的整数值。 |
static Integer | getInteger(String nm, Integer val) | 返回具有指定名称的系统属性的整数值。 |
int | hashCode() | 返回此 Integer 的哈希码。 |
static int | highestOneBit(int i) | 返回具有至多单个 1 位的 int 值,在指定的 int 值中最高位(最左边)的 1 位的位置。 |
int | intValue() | 以 int 类型返回该 Integer 的值。 |
long | longValue() | 以 long 类型返回该 Integer 的值。 |
static int | lowestOneBit(int i) | 返回具有至多单个 1 位的 int 值,在指定的 int 值中最低位(最右边)的 1 位的位置。 |
static int | numberOfLeadingZeros(int i) | 在指定 int 值的二进制补码表示形式中最高位(最左边)的 1 位之前,返回零位的数量。 |
static int | numberOfTrailingZeros(int i) | 返回指定的 int 值的二进制补码表示形式中最低(“最右”)的为 1 的位后面的零位个数。 |
static int | parseInt(String s) | 将字符串参数作为有符号的十进制整数进行分析。 |
static int | parseInt(String s, int radix) | 使用第二个参数指定的基数,将字符串参数解析为有符号的整数。 |
static int | reverse(int i) | 返回通过反转指定 int 值的二进制补码表示形式中位的顺序而获得的值。 |
static int | reverseBytes(int i) | 返回通过反转指定 int 值的二进制补码表示形式中字节的顺序而获得的值。 |
static int | rotateLeft(int i, int distance) | 返回根据指定的位数循环左移指定的 int 值的二进制补码表示形式而得到的值。 |
static int | rotateRight(int i, int distance) | 返回根据指定的位数循环右移指定的 int 值的二进制补码表示形式而得到的值。 |
short | shortValue() | 以 short 类型返回该 Integer 的值。 |
static int | signum(int i) | 返回指定 int 值的符号函数。 |
static String | toBinaryString(int i) | 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 |
static String | toHexString(int i) | 以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。 |
static String | toOctalString(int i) | 以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 |
String | toString() | 返回一个表示该 Integer 值的 String 对象。 |
static String | toString(int i) | 返回一个表示指定整数的 String 对象。 |
static String | toString(int i, int radix) | 用第二个参数指定的基数返回第一个参数的字符串表示形式。 |
static Integer | valueOf(int i) | 返回一个表示指定的 int 值的 Integer 实例。 |
static Integer | valueOf(String s) | 返回保持指定的 String 的值的 Integer 对象。 |
static Integer | valueOf(String s, int radix) | 返回一个 Integer 对象,该对象中保持了用第二个参数提供的基数进行分析时从指定的 String 中提取的值。 |
- 注:如文中有错误及不合理的地方,欢迎指出!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/144126.html