日期:2014-05-20  浏览次数:20626 次

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的处理上没有绝对严密性啊,求解!!!!




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