黑马程序员技术交流社区

标题: 关于Java中编译器类型转换的一点疑问 [打印本页]

作者: 陈佳    时间: 2013-9-3 10:27
标题: 关于Java中编译器类型转换的一点疑问
以前看过毕向东老师的Java基础视频,里面说到关于代码:byte b = 4;
byte b1 = 3;

byte b2 = 7;
b = b1+b2;
代码编译失败的问题。
毕老师对此的解释是b1, b2为变量,无法判断是否适合b的类型。即有可能损失精度。
之后我又在网上查了查,解释是两个byte类型变量相加,数据会隐式强制转换为int类型,导致等式两边类型不一致。
两种不同的解释,不知道以哪个为准?大家帮帮我吧!

作者: 焦允    时间: 2013-9-3 11:05
a. 自动类型转换

在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。

b. 强制类型转换

可以将一个占空间较大的值使用(类型)的形式强制放入一个较小的空间,有可能损失精度。

c. 字符串转换

任何值和字符串相加都会得到字符串。


数据类型转换的时机:
a.赋值

在给byte,short进行赋值时,右边的值是一个常量或常量运算且在所对应的数据类型范围内,则进行自动的数据类型转换。

如:

byte  i=1;或i=1+2;               正确

  byte  i=128;或i=126+2;       错误    超出了byte型表示的范围

      byte  i=i+1;                         错误    "="右边有变量参与运算不能进行自动类型转换,只能强转。

b.二元运算

当两个操作数中存在变量,并且类型不相同时,低类型自动转换为高类型,最低转换为int(byte,short,char都会自动转

换为int型参与运算,当然如果有long类型参与运算,会再转换成long类型),然后进行计算,得到的结果是高类型,最低为int型。

     如:byte i,j,t;

             i=1;

             j=2;

             t=i+j;  右边的i和j会自动转换为int型,然后相加,最后的int型数,在赋值时必须强制转换回byte.



整型数据长变短,强制转换;短变长,自动转换

浮点数与整型进行转换时,浮点数表示的范围远大于整数表示的范围

整数转换成浮点数的时候,自动转换,格式将进行变化(出现小数点)

浮点数转换成整数时,无论怎么变,都 不可能对原始数据进行精确描述

此时,将浮点数的小数部分去掉,只保留整数部分,强制转换。
作者: 陈佳    时间: 2013-9-3 12:58
焦允 发表于 2013-9-3 11:05
a. 自动类型转换

在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了 ...

好详细,太感谢了,以后就不怕啦!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2