JavaSE之基本数据类型大小及其类型转换
八种基本数据类型大小
类型 | 占用字节数 |
---|---|
boolean | 1 |
byte | 1 |
char | 2 |
short | 2 |
int | 4 |
float | 4 |
long | 8 |
double | 8 |
类型转换规则
发生在哪?
赋值、方法调用、算术运算以及在静态分派(重载)的匹配优先级中,可能还有一些待以后补全...
基本转换规则
**从低位类型到高位类型自动转换,从高位类型到低位类型需要强制类型转换**
也可以这样理解(个人理解,大佬勿喷): 用少的钱去换别人的不止这个价格的物品自己是乐意的(就不用别人干啥,这个时候你是没有损失的。即隐式转换),而用很多钱只能换到别人不值这个价格的的物品自己是不乐意的,这个时候如果别人掏出武器(别人强制去让你换,这个时候你是有损失的。即显示转换),你就只能乖乖的去换了。
具体转换规则
boolean 和其他基本数据类型之间不能相互转换
byte(1B) 可隐式转换为short(2B)、int(4B)、long(8B)、float(4B)、double(8B)
char(2B) 可隐式转换为int(4B)、long(8B)、float(4B)、double(8B)
short(2B) 可隐式转换为int(4B)、long(8B)、float(4B)、double(8B)
int(4B) 可隐式转换为long(8B)、float(4B)、double(8B)
float(4B) 可隐式转换为double(8B)
long(8B) 可隐式转换为float(4B)和double(8B);
double(8B) 只能强制转换了,不可隐式转换
这里特殊的点:
boolean不参与类型转换(包括强制转换),因为八种基本数据类型分为两种:boolean和数值(其他七种),只有数值类型之间才能转换。
一般的(不包括整数类型到浮点类型如int可转为float)相同位数的不能隐式转换
一般的(不包括整数类型到浮点类型如long可转为float)低位数不能转为高位数
还有一个byte不能隐式转换为char(目前不太清楚具体原因)
而对于整数类型转换为浮点类型的特殊,暂时的理解是浮点类型float比int,long可表示的范围大得多。
另外
还有一个比较小的点可能经常用到,字符串转数值类型,和数值类型转字符串:
- 字符串转数值类型,很简单,比如转int,则Integer.parserInt(""),转其他的同理,还有一个是Integer.valueOf()可以是将数字转化其包装类型或字符串转为Integer。
- 数值类型转字符串,最简单的就是这样:
String s = 1 + "";
麻烦一点的还有两种方式:
// 对应的Integer.valueof(number)是将数字转化其包装类型或字符串转为Integer
String.valueof(number);
Integer.toString(number);
基本数据类型的初始值
基本类型 | 初始值 |
---|---|
boolean | false |
char | \u0000(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
这里说一点,整形的默认类型为int,浮点数的默认类型为double。还有这个初始值是什么时候被赋予呢?有且仅有这些基本数据类型是某个类的成员变量时,在类初始化时就会被赋予。