Yefei.Blog

个人日记 WIKI

用户工具


Java 要点

char 类型是 unicode 类型,可以使用汉子等非 ASCII 单字符

基本数据类型(primitive)

除了基本数据类型,其他类型都为引用(reference)类型
Data Type Default Value Size(byte) Range
byte 0 1 -128, 127
short 0 2 -32768, 32768
int 0 4 -2147483648, 2147483648
long 0L 8 -9233372036854477808, 9233372036854477808
float 0.0f 4 -3.40292347E+38, 3.40292347E+38
double 0.0d 8 -1.79769313486231570E+308, 1.79769313486231570E+308
char '\u0000' 2 0, 65535 (\u0000, \uffff) char 是无符号类型
boolean false 1bit true, false

将数据转换为无符号

例如 byte 转换为无符号结果就需要返回比 byte 大的数据类型,使用简单的运算即可得到无符号数值 data & 0xFF0xFF 就是参与运算的数值,需要参与运算的目标字节数有多少就用多少个 FF

short byte2ubyte(byte data) {
    return data & 0xFF;
}
 
long int2uint(int data) {
    return data & 0xFFFFFFFFL;
}
 
// 转换回有符号值,直接使用类型强转即可
byte ubyte2byte(short data) {
    return (byte) data;
}

自动类型转换

byte -> short -> int -> long
char -> int
int -> double
float -> double

可能会丢失精度的转换

int -> float
long -> float
long -> double

类型提升

int a = 100;
long b = 200;
a + b = long; // 返回结果为 long 类型,所有二元运算符 (+-*/%) 运算的时候都会将结果类型提升为参与运算中的最大类型

结果溢出

int a = 100;
int b = 1000000000;
a * b = int; // 这里返回的并不是 long 类型,因为参与运算的类型都是 int,产生的并不是想要的结果,因为超过了 int 能容纳的范围
// 正确的做法应该是强制转换其中一个类型为 long
(long) a * b = long;

皖ICP备15000265号

皖公网安备 34110302000106号