美文网首页
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