美文网首页
java基础-Number

java基础-Number

作者: 16325 | 来源:发表于2020-02-28 16:58 被阅读0次

    Byte

    • 长度:1byte/8bit
    • 最大值:127 0b0111_1111
    • 最小值:-128 0b1000_0000
      byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数。

    1 在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在Java中,byte类型的取值范围也是[-128, 127]。
    2 正数的最高位都是 0 ,正数的值就是二进制表示的值。
    3 负数的最高位都是 1 ,负数的值是 取反后加一 然后加个负号得到得值。
    4 我们用8位的二进制来说明一下此规则:
    比如:00000001。最高位是0 为正数 ,那么表示的就是 十进制的 1。
    再比如:10000001.最高位是1 为负数,值是多少?取反得到 01111110 加1 得到 01111111 ,那么值为 -127

    Short

    • 长度:2byte/16bit
    • 最大值: 2^15 32767 0x7fff 0b0111_1111_1111_1111
    • 最小值:-2^15 -32768 0x8000 0b1000_0000_0000_0000

    Integer

    • 长度:4byte/32bit
    • 最大值: 2^31 -21亿 0x7fffffff
    • 最小值:-2^31 -21亿 0x80000000

    Long

    +长度:8byte/64bit
    +最大值: 2^63 约9*10^18

    • 最小值:-2^63

    Float

    • 长度:4byte/32bit
    • 正最大值:0x7f7fffff,约3.4*10^38
    • 正最小值:0x00000001,月1.4*10^(-45)
      对于Float的equals方法,比较的是两个float值的二进制表示,因此+0.0f.equals(-0.0f)返回false,NaN.equals(NaN)返回true,这是FLoat与float不同的地方。
    • float f = 1.2报错:


      image.png
    • 认为把一个双精度的值赋予一个单精度浮点数。这种情况下,java不会为我们自动转换,只会报错提醒。
    • float在计算机内部一般用32位二进制表示,而double用64位表示,相对精度更高。至于报错错,是由于java默认浮点类型字面量为double类型,所以需要做个强制类型转换

    Double

    • 长度:8byte/64bit
    • 正最大值:1.8*10^308
    • 正最小值:4.9*10^(-304)

    float 和double 主要区别

    • 01.在内存中占有的字节数不同
          单精度浮点数在机内存占4个字节
          双精度浮点数在机内存占8个字节
    • 02.有效数字位数不同
          单精度浮点数有效数字8位
          双精度浮点数有效数字16位
    • 03.数值取值范围
          单精度浮点数的表示范围:-3.40E+38~3.40E+38
          双精度浮点数的表示范围:-1.79E+308~-1.79E+308
    • 04.在程序中处理速度不同
          一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

    如果不声明,默认小数为double类型,所以如果要用float的话,必须进行强转。

    new Integer(1) 与 Integer.valueOf(1) 区别

    • new Integer(1) :会新建一个对象;
    • Integer.valueOf(1) :使用对象池中的对象,如果多次调用,会取得同一个对象的引用。
    • Integer i = 1 等同于 Integer.valueOf(1)

    对象池机制

    为了提高性能,Java 在 1.5 以后针对八种基本类型的包装类,提供了和 String 类一样的对象池机制;
    让我们看一下 Integer.valueOf(int i) 的源码,就很容易理解了:

    public final class Integer extends Number implements Comparable<Integer> {  
    public static Integer valueOf(int i) {        
      if (i >= IntegerCache.low && i <= IntegerCache.high)         
         return IntegerCache.cache[i + (IntegerCache.low)];        
      return new Integer(i);    
    }}
    

    基本类型对应的缓冲池
    Boolean:true , false
    Short, Int, Long:-128 ~ 127
    Byte, Character : \u0000 到 \u007F,也就是 0 ~ 127

    相关文章

      网友评论

          本文标题:java基础-Number

          本文链接:https://www.haomeiwen.com/subject/boxffctx.html