# 数据类型

Java中的数据类型主要分为两类

  • 基本数据类型(Primitive Type)
  • 引用数据类型(Reference Type)

# 基本数据类型

  • 8 种基本类型,值传递,存储在 Stack
  • 数值类型不存在无符号,取值范围固定,不依赖硬件环境或操作系统
  • 类变量无需初始化具有默认值,局部变量必须初始化(数组例外,数组分配空间后,以默认值初始化)
类型 空间大小/bit 范围 默认值
byte 8 [-128,127] 0
short 16 [-2^15 + 1,2^15 - 1] 0
int 32 [-2147483648,2147483647] 0
long 64 0L
float 32 0.0f
double 64 0.0d
boolean 1 true/false false
char 16 /u0000

# 数值型

  • 整数常量的默认类型是int
  • 小数常量的默认类型是double
  • byte变量直接赋值时,如果在范围内会自动进行int->byte转换
  • byte可以方便的用于数据传输以及编码转换

类型转换

  • 向上转换: 表达式中,如果进行运算的两个数据类型不同,自动向上转换,不会出现数值转化错误
    char->short->int->long->float->double
    signed->unsigned
  • 向下转换: 需要使用强制类型转换
int num1 = 1;
int num2 = 1;
long sum1 = num1 + num2; // Automatically cast to more general type
int sum2 = (int)sum1;    // Explicit type cast

int x = 2147483647;    // Max of int
long n = x + 1;        // n = -2147483648
long n = x + 1L;       // n = 2147483648
long n = (long)x + 1;  // n = 2147483648
1
2
3
4
5
6
7
8
9

# 字符型

  • 使用单引号'ch',区别于字符串使用双引号"str"
  • Java使用UNICODE编码,可以认为包含了ASCII编码('A': 65, 'a': 97, '0': 48)

ASCLL与UNICODE编码

ASCII: 每个字符占用 1 字节(byte),可以表示 256 个字符,分为标准码(0-127),键盘上可以找到和拓展码(128-255),键盘上找不到,可以表示英文字符和一些符号

UNICODE: 每个字符占用 2 byte,可以表示世界所有语言文字

# 布尔型

  • 只有truefalse两个值(如果赋值null会报错)
  • 不同于CJava不支持数值型作为布尔型
int flag = 1;
if (flag) {
    // Error
}
1
2
3
4

# 引用数据类型

  • Java 引用类型指向一个对象,指向对象的变量是引用变量,默认值为 null
  • Java 创建对象实例时,将地址赋给引用变量,存储于 Stack,实例存储于 Heap
  • 对象、数组都是引用数据类型,引用传递

引用类型的大小取决于地址空间,一个 32 位的地址,引用类型需要 4 byte 存储,如果是 64 位,则是 8 byte

注意

特殊数据类型: null
null用来标识一个空的对象,因此不能将null赋给基本型的变量
null可以转换为任何引用类型

# 变量类型

# 局部变量

  • 局部变量在其作用域中被执行时创建,存储于Stack,在执行完毕后销毁
  • 访问修饰符不能修饰局部变量
  • 局部变量没有默认值,在被声明后必须经过初始化才能使用

# 实例变量

  • 实例变量声明在类中,方法、构造方法和语句块外
  • 实例变量跟随对象创建而创建,销毁而销毁
  • 实例变量可以被访问修饰符修饰,且具有默认值

# 类变量

  • 类变量即静态变量,由static修饰,声明于方法之外
  • 同一个类的所有实例对象共享类变量的一份拷贝
  • 静态变量通常与final配合用于声明常量,名称一般使用大写字母
  • 类变量具有默认值,与实例变量相似

# 参考

[1] Java菜鸟教程 (opens new window)

[2] JAVA 8大数据类型 (opens new window)

[3] 阿里云大学 | 李兴华 - Java语言基础 (opens new window)

Last Updated: 9/29/2020, 9:20:43 AM