首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

literal有关问题求解

2012-01-12 
literal问题求解bytea0x7f//编译运行都没问题bytea0x80//编译通不过,需要改为(byte)0x80为什么第一条

literal问题求解
byte   a   =   0x7f;//编译运行都没问题
byte   a   =   0x80;//编译通不过,需要改为(byte)0x80;

为什么第一条语句就不用加(byte)呢,如果是byte   a   =   0x7fL的话,编译就通不过了,我的疑问可以归结为0x7f到底属于哪种literal,因为jls这本书上只有integer,FloatingPoint,Boolean,Character,String,Null这几种literal,并没有byteliteral,照jls的说法0x7f,0x80都应该为integerliteral,如果assign给byte类型的都应该加(byte)吧,可是为什么出现两种情况呢,这么一来觉得java在literal的处理上没有绝对严密性啊,求解!!!!




[解决办法]
就这么理解吧,没指明具体类型,则编译器帮你判断是否可以安全转换,指明了编译器就认为你自己会处理,它就简单的把一个数当作一般的这个类型来处理,如果这个类型长度大于要转换的类型,也就只能需要你自己去强制转换了。
就像你提供了构造函数,编译器就不帮你提供默认构造函数,你没提供,编译器就帮你提供

热点排行