Java基本数据类型

基本数据类型表

类型 存储需求 取值范围 包装类型
byte 1字节 -128 ~ 127 Byte
short 2字节 -32 768 ~ 32 767 Short
int 4字节 -2 147 483 648 ~ 2 147 483 647 ( 正好超过20 亿) Integer
long 8字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 Long
float 4字节 大约± 3.402 823 47E+38F (有效位数为6 ~ 7 位) Float
double 8宇节 大约± 1.797 693 134 862 315 70E+308 (有效位数为15 位) Double
char 2字节 单个字符 Character
boolean true、false Boolean

注: Java JVM规范没有明确指出boolean的取值范围,1字节或者4字节都有可能。

转义字符表

转义序列 名称 Unicode值
\ddd 1~3位八进制数据所表示的字符,如:\141 \ddd
\uxxxx 4位16进制数据所表示的字符,如:\u2122 \uxxxx
\b 退格 \u0008
\" 双引号 \u0022
\t 制表 \u0009
\’ 单引号 \u0027
% 反斜杠 \u005c
\n 换行 \u000a
\r 回车 \u000d

注:
可以使用十六进制表示浮点数值。例如, 0.125=2^-3 可以表示成0xl.0p-3。在十六进制表示法中, 使用p 表示指数, 而不是e。注意, 尾数采用十六进制, 指数采用十进制。指数的基数是2, 而不是10。所有的浮点数值计算都遵循IEEE 754 规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
•正无穷大
•负无穷大
•NaN (不是一个数字)
例如, 一正整数除以0的结果为正无穷大。计算0/0 或者负数的平方根结果为NaN。

一些示列:
int a = 0b1010; // 二进制,0b开头
int aa = 0b1010_10; // _为了可读性
int b = 07; // 八进制,0开头
int c = 0xff; // 十六进制,0x开头
double d = 0x8p-3; // 2^-3 * 8
char a = ‘\u005B’; // [
char b = ‘\u005D’; // ]
char c = ‘\141’; // a
char d = ‘a’;
char f = 97;

Unicode与char

Unicode术语表

码点是指与一个编码表中的某个字符对应的代码值。在Unicode标准中,码点采用十六进制书写,并加上前缀U+, 例如U+0041 就是拉丁字母A 的码点。Unicode 的码点可以分成17个代码级别。第一个代码级别称为基本的多语言级别, 码点从U+0000 到U+FFFF, 其中包括经典的Unicode代码;``其余的16个级另码点从U+10000 到U+10FFFF , 其中包括一些辅助字符。UTF-16 编码采用不同长度的编码表示所有Unicode 码点。在基本的多语言级别中, 每个字符用16位表示,通常被称为代码单元 ; 而辅助字符采用一对连续的代码单元进行编码。这样构成的编码值落人基本的多语言级别中空闲的2048 字节内, 通常被称为替代区域。U+D800 ~ U+DBFF用于第一个代码单元,U+DC00 ~ U+DFFF 用于第二个代码单元。这样设计十分巧妙, 我们可以从中迅速地知道一个代码单元是一个字符的编码, 还是一个辅助字符的第一或第二部分。例如,⑪是八元数集的一个数学符号, 码点为U+1D546, 编码为两个代码单元U+D835和U+DD46。
在Java 中,char 类型描述了UTF-16 编码中的一个代码单元。

自动装箱、拆箱

自动装箱

在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:
Integer i = new Integer(10);
而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可了:
Integer i = 10;hen
这个过程中会自动根据数值创建对应的Integer对象,即Integer i = 10;会自动转化为Integer i = Integer.value0f(10);这就是装箱。

自动拆箱

与自动装箱对应的便是自动拆箱。在把一个Integer赋值给一个int时便存在拆箱。
Integer i = new Integer(10);
int n = i;// 自动拆箱,实际执行int n = i.intValue();
这就是自动拆箱。

注:其他类型的装箱、拆箱类似。
总结:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。
甚至在算术表达式中也能够自动地装箱和拆箱。例如,可以将自增操作符应用于一个包装器引用:
Integer n = 3;
n++;
编译器将自动地插人一条对象拆箱的指令, 然后进行自增计算, 最后再将结果装箱。

展开阅读全文

没有更多推荐了,返回首页