java 比较运算符 类型转换

来源:百度知道 编辑:UC知道 时间:2024/05/25 10:43:06
请问高手,java中类型转换的时机?赋值的时候,会发生类型转换,还有什么时候会发生,比较的时候会发生吗?
看下边的程序

System.out.println((12.0==12));
System.out.println(('a'==97.0));
结果为什么为true??

...................char
........↓
byte→short→int→long
..... ... ↘
.......float → double
自动转换图
另外long int 和float double有可能损失精度

System.out.println((12.0==12));
12.0浮点型double 12数值型int
int→double自动转换 所以结果为真 返还布尔值TRUE

System.out.println(('a'==97.0));
"a"字符char 97.0为浮点值double
char→int→double自动转换
a的进制表示就是97
97==97.0所以结果为真 返还布尔值TRUE

System.out.println((12.0==12));
这一句是把右边的int型12自动转换为double类型.也就是12.0==12.0;

System.out.println(('a'==97.0));
这一句是把char型'a'先转换为int(ascii码),然后再转换为double.也就是97.0==97.0;

计算时也会类型转换,如果没有转换成功,会报错误。
比较的时候也会进行类型转换。
12.0和12进行比较的时候,会向整数转化,即12.0转换成12,故结果为true
a的ascii码为97,97不会向ascii码转,只会向最近的类型转化,故结果为true

对于相关问题可参见java数据类型转换部分知识。

对于Java这种强类型的语言来讲,最好不要依靠它的自动类型转换。你在用之前确认好类型,不然自动类型转换会带来预想不到的问题。

楼上二位说的都挺有道理的....