Java数据类型

1. Java数据类型分为两大块

  • 基本数据类型(本章重点分析)。
  • 引用数据类型。
  • 在分析讲解数据类型之前先提前介绍一个工具(jol)。

2. 工具之jol

  • 本工具是openJDK提供的。
  • 目的为了可以看清对象的内存布局,本章使用这个工具的原因是为了可视化每个基本数据类型的所占空间的大小。初学者可以不适用本工具,直接跳过本次工具的介绍即可。
  • 依赖
<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.16</version>
</dependency>

3. 基本数据类型

  • 基本数据类型具体分为四大类
  • 汇总
数据类型所属分类字节大小bit位默认值
byte整数型180
short整数型2160
int整数型4320
long整数型8640
float浮点型4320.0
double浮点型8640.0
char字符型216’ ’
boolean布尔型18false

3.1 整数型

3.1.1 byte类型

  • byte类型属于基本类型中整数型其中的一种,占用1个字节,默认值为0。
  • 取值范围为(-2的7次方 ~ 2的7次方减一)。
为什么会是2的7次方呢,不是一个字节等于8个bit吗?
  • 因为最前面的那个bit是符号位 1为负数,0为正数。
  • 代码
public static void main(String[] args) {
    byte bMemoryInfo = 97;
    ClassLayout classLayout = ClassLayout.parseInstance(bMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Byte.value @12 (byte, 1b)
size = 16

-------------------------
java.lang.Byte object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0xf80021d9
 12   1   byte Byte.value                97
 13   3        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 3 bytes external = 3 bytes total
  • 输出信息解释
    OFF 是 offset的简写,偏移量的意思
    SZ 是 size的简写,字节大小的意
    TYPE DESCRIPTION 是类型描述的意思
    TYPE DESCRIPTION为byte Byte.value 的SZ 为 1 说明byte类型占用一个字节的空间。
    TYPE DESCRIPTION为object header 这个是对象头的信息(初学者不必关注)。
    TYPE DESCRIPTION为object alignment gap 这个是对齐填充的信息(初学者不必关注)。

3.1.2 short类型

  • short类型也是属于基本类型中整数型其中的一种,占用2个字节,默认值为0。
  • 取值范围为(-2的15次方 ~ 2的15次方减一)。
  • 代码
public static void main(String[] args) {
    short sMemoryInfo = 97;
    ClassLayout classLayout = ClassLayout.parseInstance(sMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Short.value @12 (short, 2b)
size = 16

-------------------------
java.lang.Short object internals:
OFF  SZ    TYPE DESCRIPTION               VALUE
  0   8         (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4         (object header: class)    0xf8002220
 12   2   short Short.value               97
 14   2         (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 2 bytes external = 2 bytes total
  • 输出信息解释如byte类型一样

3.1.3 int类型

  • int类型也是属于基本类型中整数型其中的一种,占用4个字节,默认值为0。
  • 取值范围为(-2的31次方 ~ 2的31次方减一)。
  • 代码
public static void main(String[] args) {
    int iMemoryInfo = 97;
    ClassLayout classLayout = ClassLayout.parseInstance(iMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Integer.value @12 (int, 4b)
size = 16

-------------------------
java.lang.Integer object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0xf8002267
 12   4    int Integer.value             97
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
  • 输出信息解释如byte类型一样

3.1.4 long类型

  • long类型也是属于基本类型中整数型其中的一种,占用8个字节,默认值为0。
  • 取值范围为(-2的63次方 ~ 2的63次方减一)。
  • 代码
public static void main(String[] args) {
    long lMemoryInfo = 97L;
    ClassLayout classLayout = ClassLayout.parseInstance(lMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Long.value @16 (long, 8b)
size = 24

-------------------------
java.lang.Long object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0xf80022ae
 12   4        (alignment/padding gap)   
 16   8   long Long.value                97
Instance size: 24 bytes
Space losses: 4 bytes internal + 0 bytes external = 4 bytes total
  • 输出信息解释如byte类型一样

3.2 浮点型

3.2.1 float类型

  • float类型也是属于基本类型中整数型其中的一种,占用4个字节,默认值为0.0。
  • 代码
public static void main(String[] args) {
    float fMemoryInfo = 97F;
    ClassLayout classLayout = ClassLayout.parseInstance(fMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Float.value @12 (float, 4b)
size = 16

-------------------------
java.lang.Float object internals:
OFF  SZ    TYPE DESCRIPTION               VALUE
  0   8         (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4         (object header: class)    0xf800214b
 12   4   float Float.value               97.0
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
  • 输出信息解释如byte类型一样

3.2.2 double类型

  • double类型也是属于基本类型中整数型其中的一种,占用8个字节,默认值为0.0。
  • 代码
public static void main(String[] args) {
    double dMemoryInfo = 97;
    ClassLayout classLayout = ClassLayout.parseInstance(dMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Double.value @16 (double, 8b)
size = 24

-------------------------
java.lang.Double object internals:
OFF  SZ     TYPE DESCRIPTION               VALUE
  0   8          (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4          (object header: class)    0xf8002192
 12   4          (alignment/padding gap)   
 16   8   double Double.value              97.0
Instance size: 24 bytes
Space losses: 4 bytes internal + 0 bytes external = 4 bytes total
  • 输出信息解释如byte类型一样

3.3 字符型

3.3.1 char类型

  • char类型也是属于基本类型中整数型其中的一种,占用2个字节,默认值为’ '。
  • 代码
public static void main(String[] args) {
    char cMemoryInfo = 'a';
    ClassLayout classLayout = ClassLayout.parseInstance(cMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Character.value @12 (char, 2b)
size = 16

-------------------------
java.lang.Character object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0xf80020c6
 12   2   char Character.value           a
 14   2        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 2 bytes external = 2 bytes total
  • 输出信息解释如byte类型一样

3.4 布尔型

3.4.1 boolean类型

  • boolean类型也是属于基本类型中整数型其中的一种,占用1个字节,默认值为false。
  • 代码
public static void main(String[] args) {
    boolean bMemoryInfo = false;
    ClassLayout classLayout = ClassLayout.parseInstance(bMemoryInfo);
    System.out.println(classLayout.toString());
    System.out.println("-------------------------");
    System.out.println(classLayout.toPrintable());
}
  • 输出信息
java.lang.Boolean.value @12 (boolean, 1b)
size = 16

-------------------------
java.lang.Boolean object internals:
OFF  SZ      TYPE DESCRIPTION               VALUE
  0   8           (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4           (object header: class)    0xf8002085
 12   1   boolean Boolean.value             false
 13   3           (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 3 bytes external = 3 bytes total
  • 输出信息解释如byte类型一样

4. 引用数据类型

  • 引用数据类型的不过多介绍大致有下面这么多种。
  • 数组
  • 枚举
  • 字符串
  • 集合
  • Object
  • 反射
  • 注解
  • 36
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值