A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 松毛 高级黑马   /  2013-11-10 07:26  /  1468 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个语句byte b = 1; b = ++b;   能够编译通过。
请问一下为什么,它的类型是怎样转换的?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

5 个回复

倒序浏览
执行 byte b=1 这句时,java虚拟机自动对 1 这个常量进行检查,没有超出byte类型的范围,然后赋值给b。
执行 b=++b 这句时,变量 b 进行自增运算,但没有和其它类型的变量或常量进行运算,所以 b 并没有发生类型提升的情况,最后把 b 的值赋给  b  
回复 使用道具 举报
这个没有转换,就是b自增1,但是如果写b=b+1的话后面的1就是个int型的,那时候才要转换类型,虽然都是加1,但是性质不一样。
回复 使用道具 举报

        首先,自增自减运算是一种特殊的算术运算。既然是特殊,绝对有不同
       
--------------------自增自减运算实例代码-----------------------------
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类型,从而需要进行强制类型转换
        而在使用自增自减运算时,并不需要强制类型转换。
       
        使用自增自减运算时,并不进行类型的提升,
        操作前数值是什么类型,操作后的类型仍然是什么类型

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
++b: b=b+1; bbyte1byte类型, 这是++运算符的特点
b本来就是byte类型,所以这正确。

回复 使用道具 举报
帖子已分类,若仍有疑惑,可重新提问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马