日期:2014-05-20  浏览次数:20812 次

Java中数据类型转换???
首先Java中的关于数据转换的规则如下:
1.类型要兼容
2.目标类型大于源类型(小于源类型要强制转换)
------------------------------------------
首先说一下能兼容的:
类型 字节
byte 1
short 2
int 4
long 8
float 4
double 8
char 2
-------------------------------------------
看如下代码:
Java code
byte a=(short)1;
byte b=(int)1;
byte c=(char)1;

首先是强制类型转换为小括号中的数据类型 
自动转换为byte型
但是为什么会自动类型转换???(目标类型小于源类型)

------解决方案--------------------
byte范围是-128到+127, java中char实际是用ascii码表示(是一个int整数),char字符转为byte, 字符ascii码大小只要不超过127, 编译器是不会报错的! 
比如: byte a = 'a';(正确,根据'a'的ascii码) byte b = 127; (类型都为int) byte d = (short)123; (正确,short宽度小于int)
byte c = '错';(错误, ascii码确定超过127)
只要目标类型不比int类型宽,数值在-128-127之间,编译器都是不会报错的!
------解决方案--------------------
每种基本数据类型都有自己的表数范围(详见说明文档),对于常数(字面值,说法不一,比如,1,123456都为常数)编译器能够识别是否在该变量类型的表数范围之内,如果在就无需强转,但是如果一种类型的变量指向了另外变量(类型表数范围比源类型大,必须强转,类型一致,但右边是数学运算,比如+1,-1,右边的类型范围自动提升为int,如果本类型表数比int小,那么必须强转):常数,编译器能够识别,但加了变量,编译器无法确定范围