java关键字(一)——byte,int,long,short

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 ~ 271
    128 ~ 127
(2) int
  • int类型 占4个字节,即32位,其中最高位为符号位。
    所以,int类型的整数取值范围为: 231 ~ 2311
    2147483648 ~ +2147483647
(3) short
  • short类型占2个字节,即16位,其中最高位为符号位。
    所以,short类型的整数取值范围为: 215 ~ 2151
    32768 ~ +32767
(4) long
  • long类型占8个字节,即64位,其中最高位为符号位。
    所以,short类型的整数取值范围为: 263 ~ 2631
    9223372036854775808 ~ +9223372036854775807

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(11111111),而是-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 intMAX_VALUE保持 int 类型的最大值的常量可取的值为 231-1。
static intMIN_VALUE保持 int 类型的最小值的常量可取的值为 -231。
static intSIZE以二进制补码形式表示 int 值的位数。
static ClassTYPE表示基本类型 int 的 Class 实例。

方法摘要

返回值类型方法名(参数)作用
static intbitCount(int i)返回指定 int 值的二进制补码表示形式的 1 位的数量。
bytebyteValue()以 byte 类型返回该 Integer 的值
intcompareTo(Integer anotherInteger)在数字上比较两个 Integer 对象。
static Integerdecode(String nm)将 String 解码为 Integer。
doubledoubleValue()以 double 类型返回该 Integer 的值。
booleanequals(Object obj)比较此对象与指定对象。
floatfloatValue()以 float 类型返回该 Integer 的值。
static IntegergetInteger(String nm)确定具有指定名称的系统属性的整数值。
static IntegergetInteger(String nm, int val)定具有指定名称的系统属性的整数值。
static IntegergetInteger(String nm, Integer val)返回具有指定名称的系统属性的整数值。
inthashCode()返回此 Integer 的哈希码。
static inthighestOneBit(int i)返回具有至多单个 1 位的 int 值,在指定的 int 值中最高位(最左边)的 1 位的位置。
intintValue()以 int 类型返回该 Integer 的值。
longlongValue()以 long 类型返回该 Integer 的值。
static intlowestOneBit(int i)返回具有至多单个 1 位的 int 值,在指定的 int 值中最低位(最右边)的 1 位的位置。
static intnumberOfLeadingZeros(int i)在指定 int 值的二进制补码表示形式中最高位(最左边)的 1 位之前,返回零位的数量。
static intnumberOfTrailingZeros(int i)返回指定的 int 值的二进制补码表示形式中最低(“最右”)的为 1 的位后面的零位个数。
static intparseInt(String s)将字符串参数作为有符号的十进制整数进行分析。
static intparseInt(String s, int radix)使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
static intreverse(int i)返回通过反转指定 int 值的二进制补码表示形式中位的顺序而获得的值。
static intreverseBytes(int i)返回通过反转指定 int 值的二进制补码表示形式中字节的顺序而获得的值。
static introtateLeft(int i, int distance)返回根据指定的位数循环左移指定的 int 值的二进制补码表示形式而得到的值。
static introtateRight(int i, int distance)返回根据指定的位数循环右移指定的 int 值的二进制补码表示形式而得到的值。
shortshortValue()以 short 类型返回该 Integer 的值。
static intsignum(int i)返回指定 int 值的符号函数。
static StringtoBinaryString(int i)以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
static StringtoHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。
static StringtoOctalString(int i)以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
StringtoString()返回一个表示该 Integer 值的 String 对象。
static StringtoString(int i)返回一个表示指定整数的 String 对象。
static StringtoString(int i, int radix)用第二个参数指定的基数返回第一个参数的字符串表示形式。
static IntegervalueOf(int i)返回一个表示指定的 int 值的 Integer 实例。
static IntegervalueOf(String s)返回保持指定的 String 的值的 Integer 对象。
static IntegervalueOf(String s, int radix)返回一个 Integer 对象,该对象中保持了用第二个参数提供的基数进行分析时从指定的 String 中提取的值。
  • 注:如文中有错误及不合理的地方,欢迎指出!
  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值