首先Java中的关于数据转换的规则如下:
1.类型要兼容
2.目标类型大于源类型(小于源类型要强制转换)
------------------------------------------
首先说一下能兼容的:
类型 字节
byte 1
short 2
int 4
long 8
float 4
double 8
char 2
-------------------------------------------
看如下代码:
byte a=(short)1;
byte b=(int)1;
byte c=(char)1;
首先是强制类型转换为小括号中的数据类型
再自动转换为byte型
但是为什么会自动类型转换???(目标类型小于源类型)
1.类型要兼容
2.目标类型大于源类型(小于源类型要强制转换)
------------------------------------------
首先说一下能兼容的:
类型 字节
byte 1
short 2
int 4
long 8
float 4
double 8
char 2
-------------------------------------------
看如下代码:
byte a=(short)1;
byte b=(int)1;
byte c=(char)1;
首先是强制类型转换为小括号中的数据类型
再自动转换为byte型
但是为什么会自动类型转换???(目标类型小于源类型)
byte a=(short)t;
JDK1.4是不会自动转的
会报错
// byte e=(float)1;
// byte f=(long)1; 这三条语句就会报错!!
这个 ……
到底是怎么回事?
Why???
t
The earth always goes around the sun,that is it.
编译器会自动判断是否可以转,byte b=(int)1;这种情况,1<128,所以编译器通过。但是,当这样:byte a=(int)128;编译器就会报错了。
比如: byte a = 'a';(正确,根据'a'的ascii码) byte b = 127; (类型都为int) byte d = (short)123; (正确,short宽度小于int)
byte c = '错';(错误, ascii码确定超过127)
只要目标类型不比int类型宽,数值在-128-127之间,编译器都是不会报错的!
byte a=(short)1;/*等号右边的表达式的值是2字节 存1字节byte的时候必须要进行强转啊?这个是怎么回事?*/
byte b=(int)1;/*这个:右边的表达式的值为4字节 左面的变量为1字节 怎么会自动转换?*/
byte c=(char)1;/*右面是2字节 左面是1字节*/
byte a = (char)127;
byte a = (char)128;为什么127那个可以通过编译,但是下面的确不可以了。之前看LZ的问题的时候觉得特别怪异,想不通为什么能自动转换。我这个谁能给个解释。