java的数据类型

Posted woxbwo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的数据类型相关的知识,希望对你有一定的参考价值。

基本概念

bit(位)

位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。

byte(字节)

字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据或者一个英文字母,但是一个汉字需要两个字节表示。

换算

1Byte=8bit
1KB=1024Byte(字节)=8*1024bit
1MB=1024KB
1GB=1024MB

1TB=1024GB

java数据类型

基本数据类型

技术图片

boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。

JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。

包装类型

 基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

技术图片

缓存池

new Integer(123) 与 Integer.valueOf(123) 的区别在于:

  • new Integer(123) 每次都会新建一个对象。
  • Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。

技术图片

valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。

技术图片

在 Java 8 中,Integer 缓存池的大小默认为 -128~127。

技术图片

 

编译器会在自动装箱过程调用 valueOf() 方法,因此多个值相同且值在缓存池范围内的 Integer 实例使用自动装箱来创建,那么就会引用相同的对象。

基本类型的对应的缓冲池:

  • boolean values true and false
  • all byte values
  • short values between -128 and 127
  • int values between -128 and 127
  • char in the range \\u0000 to \\u007F

在使用这些基本类型对应的包装类型时,如果该数值范围在缓冲池范围内,就可以直接使用缓冲池中的对象。

Byte、Short、Integer、Long、Char这几个装箱类的valueOf()方法都会做缓存,而Float、Double则不会,原因也很简单,因为byte、Short、integer、long、char在某个范围内的整数个数是有限的,但是float、double这两个浮点数却不是。

在 jdk 1.8 所有的数值类缓冲池中,Integer 的缓冲池 IntegerCache 很特殊,这个缓冲池的下界是 - 128,上界默认是 127,但是这个上界是可调的,在启动 jvm 的时候,通过 -XX:AutoBoxCacheMax=<size> 来指定这个缓冲池的大小,该选项在 JVM 初始化的时候会设定一个名为 java.lang.IntegerCache.high 系统属性,然后 IntegerCache 初始化的时候就会读取该系统属性来决定上界。

 

以上是关于java的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

java中的引用数据类型是啥意思?

java中引用数据类型和基本数据类型的区别

JAVA都有哪些基本数据类型啊

JAVA的基本数据类型和引用数据类型的区别

java中的引用数据数据类型是怎样的?

java 数据类型