黑马程序员技术交流社区

标题: 类型转换问题 [打印本页]

作者: 松毛    时间: 2013-11-10 07:26
标题: 类型转换问题
这个语句byte b = 1; b = ++b;   能够编译通过。
请问一下为什么,它的类型是怎样转换的?

作者: 蓝雨星空    时间: 2013-11-10 08:54
执行 byte b=1 这句时,java虚拟机自动对 1 这个常量进行检查,没有超出byte类型的范围,然后赋值给b。
执行 b=++b 这句时,变量 b 进行自增运算,但没有和其它类型的变量或常量进行运算,所以 b 并没有发生类型提升的情况,最后把 b 的值赋给  b  
作者: hubby    时间: 2013-11-10 08:58
这个没有转换,就是b自增1,但是如果写b=b+1的话后面的1就是个int型的,那时候才要转换类型,虽然都是加1,但是性质不一样。
作者: Shimano    时间: 2013-11-10 10:37

        首先,自增自减运算是一种特殊的算术运算。既然是特殊,绝对有不同
       
--------------------自增自减运算实例代码-----------------------------
public class ZiZengJian {
        public static void main(String[] args){
                byte b1 = 5;                //定义一个byte类型的变量
                byte b2 = (byte)(b1 + 1);//进行强制类型转换
                System.out.println("使用加运算符的结果是"+b2);
                byte b3 = 5;                //定义一个byte类型的变量
                byte b4 = ++b3;                //进行自增运算,不需要类型转换
        }
}
-------------------------------------------------------------       
       
       
        在该程序中,当对byte类型执行+1运算时,由于java默认整数类型为int,
        所以1为int类型,加运算后的结果也是int类型,从而需要进行强制类型转换
        而在使用自增自减运算时,并不需要强制类型转换。
       
        使用自增自减运算时,并不进行类型的提升,
        操作前数值是什么类型,操作后的类型仍然是什么类型
作者: 杨增坤    时间: 2013-11-10 10:39
++b: b=b+1; bbyte1byte类型, 这是++运算符的特点
b本来就是byte类型,所以这正确。


作者: 黄炳期    时间: 2013-11-10 10:40
帖子已分类,若仍有疑惑,可重新提问




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