1.基本数据类型
众所周知Java一共有八种数据类型
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
int | 32 bits | Integer | ||
short | 16 bits | Short | ||
long | 64 bits | Long | ||
float | 32 bits | Float | ||
double | 64 bits | Double | ||
byte | 8 bits | -128 | 127 | Byte |
char | 16 bits | Unicode 0 | Unicode | Character |
boolean | Boolean |
从此表看出,相交于c语言,Java多了boolean类型,而且各类型的取值范围也有所不同。
且Java字符型不再是以ASCII码值,而是转变成了Unicode这种以往不同的编码。
由科普中国-科学百度我们可以得知二者的不同:
ASCII
Unicode
由此可见Unicode相较于ASCII码更加全面,可以满足跨语言跨平台进行文本转换,处理的要求。
2.类型转换
类型转换分为隐式(自动类类型转换)与显式(强制类型转换)
其中自动类类型转换的特点是:自动
自动类类型转换有两种情况:
1.不同数据类型之间运算:系统会自动的将运算优先级别低的转换成级别高的,结果和运算级别高的数据类型一样。
2.赋值运算符两边类型不一样时,系统会自动将右侧表达式的类型转换成左侧的变量类型,然后再赋值。
例如:
public class Test{ public static void main(String[] args) { double d=3.14; int i=10; d=i; i=d;//double表示数据范围大,直接将int交给double会有数据丢失 byte b1=100; byte b2=258;//超过了byte的数据范围,会数据丢失 } }
强制类型转换的特点是从范围大的到范围小的:
例如
public class Test{ public static void main(String[] args) { int a = 10; long b = 100L; float f = 3.14F; double d = 5.12; d = f; //数据范围由小到大,隐式转换 f = (float)d; //数据范围由大到小,需要强转,否则编译失败 a = d; // 报错,类型不兼容 a = (int)d; // double没有int表示的数据范围大,需要强转,小数点之后全部丢弃 byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换 byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错 } }
从这两个例子我们可以看出显示与隐式不同的应用环境。
值得注意的是:浮点数到整数的转换会舍弃小数,并非四舍五入得到所值
并且:boolean类型不能够强转,因为boolean类型返回值是true与false