数据类型分类有常量和变量
而变量类型有基本数据类型和引用类型
变量
基本数据类型
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
基本数据类型、位数、封装器
封装类继承关系
char
赋值
- 字符赋值要用''
- 数字赋值,实际上是该数字对应的Unicode字符,0~65535的整数赋值给char型常量或变量
Unicode和UTF-16的关系?
Unicode 和 ASCII 是字符集, 而 UTF-8, UTF-16 等是一种编码. 是 unicode 的表现形式.
UTF-8 是一种 Unicode 的编码形式. 它可能占用 1~4 个字节. UTF-16只占两个字节
Unicode ASCII UTF-8 GBK关系 java采用Unicode字符编码,而char 是采用 UTF-16 来编码,占两个字节
!
char 是采用 UTF-16 来编码的
当将源码用 Javac 编译的时候, 默认是按照系统默认的编码格式读取 Java 源文件, 然后以 UTF-8 的格式输出到 .class 字节码文件中.
当运行代码时, 读入到内存里的字符(char)或字符串(String), char 是采用 UTF-16 来编码的.
char 永远是 2 个字节. 但对于超过 2 个字节的 UTF-16 编码的字符来说. 需要多个 char 来表示. 比如 emoji 表情. 比如某些 APP 输入框输入表情占用了 2 个字符. 就是字符串长度不等于字符长度的问题
超过 2 个字节的 UTF-16 编码的字符叫做补增字符
java用int表示字符的码点。提供相应的API用于char和基于代码点的表示法之间的转换
字节序
比如中,输出的字节数是4,前面两个字节是字节序的标志,后面才是真正的内容 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。
结论
- Java char 不存 UTF-8 的字节,而是 UTF-16 的.
- Unicode 通用字符集占2个字节,例如“中”.
- Unicode 是扩展字符集需要用一对char来表示,例如“emoji”
- Unicode 是字符集, 不是编码.
- Java String 字符串长度不等于字符数.
引用数据类型
引用类型:类 接口 数组 枚举 标注
对象的组成:对象头,对象实例,对象填充
步骤:
- Student stu = new Student()
- JVM加载class到方法区
- 在堆空间分配空间并创建Student实例
- 把这个实例的地址赋值给stu
基本数据类型和引用数据类型比较
基本数据类型:存储简单,运算效率高,直接运算,包装类要拆箱再装箱
引用数据类型:java一切皆是对象的思想
常量
小数默认是double,整数默认是int
十六进制整型常量:需以0x或0X开头,如0xff,0X9A
八进制整型常量:八进制必须以0开头,如0123,034
浮点数常量
- 由于小数常量的默认类型是double型,所以float类型的后面一定要加f(F)。
- 由于整数常量的默认类型是int型,所以当数值超过int范围,float类型的后面一定要加f(F)。
字符常量
字符型常量需用两个单引号括起来
转义字符
①\r表示接受键盘输入,相当于按下了回车键;
②\n表示换行;
③\t表示制表符,相当于Table键;
④\b表示退格键,相当于Back Space键;
⑤\'表示单引号;
⑥\''表示双引号;
⑦\\表示一个斜杠\。