<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    Why int can't be passed to wrapper type Byte constructor?

    Let's take a look at the following code:

    class Program {
    public static void main (String[] args) {
    byte a = 1;
    Byte b = new Byte(primitiveByte);
    Byte c = new Byte(1);
    Byte d = new Byte((byte)1);
    System.out.print(b.byteValue() + c.byteValue());
    }
    }

    Why does the line "byte a = 1;" compile without error? and Why does the "Byte c = new Byte(1);" has a compile-time error?. Both of them use the integer literal value 1 within the range of byte. So why explicit casting "(byte)1" is needed?

    The assignment conversion (such as "byte a = 1;") is different than the method invocation conversion (such as "Byte c = new Byte(1);").  They are two subsections in Java Language Specification 3rd Edition:

    • 5.2 Assignment Conversion : Assignment conversion converts the type of an expression to the type of a specified variable.
    • 5.3 Method Invocation Conversion : Method invocation conversion is applied to each argument in a method or constructor invocation and, except in one case, performs the same conversions that assignment conversion does.

    Assignment Conversion

    Please read the above link for the detail about Assignment Conversion in Java. For our example:

    byte a = 1; 

    The assignment will not generate the compiler error because at any time if an integral value is assigned to any of the primitive types (byte, char, short), and the right hand side value is within the range of the left hand side data type, it will not generate an error. Hence as 1 is within the range of byte (-128 to 127), it is not generating compiler error. For example:

    byte a = 129; //Compile-time error

    When you assign an intergal value to any primitive type variable, the compiler will do a range checking to see if this value is in the range of the left side data type. If it is NOT within the range of data type, a compile-time error occurs.

    If the righ-hand of assignment is a variable or expression, can narrowing primitive conversions still work (5.1.3 Narrowing Primitive Conversions in Java Language Specification 3rd Edition)?

    • If the variable is a compile-time constant and the constants value is within the range of the left side data type, then it can be assigned to a narrower primitive type. Otherwise, a compiler error will occurs.
    • If the expression is a compile-time constant expression and the evaluated value is within the range of the left side data type, then it can be assigned to a narrower primitive type. Otherwise, a compiler time error will occurs.

    For example:

    int i1=1;
    final int i2 = 127;
    final int i3 = 245;
    byte b1 = i1; //Compile-time error, not final variable
    byte b2 = i2; //OK, compile time constant
    byte b3 = i3; //Compile-time error, over range
    byte b4 = (i2 + 2); //OK, compile time constant expression
    byte b5 = (i1 + 2); //Compile-time error, not final variable

    Method Invocation Conversion

    Please read the above link for the detail about the Method Invocation Conversion in Java. For our example:

    Byte c = new Byte(1);

    A compile-time error will occurs because you are passing an integer to the constructor of the Wrapper class Byte, the compiler will not do the implicit casting here.

    The method invocation conversions specifically do not include the implicit narrowing of integer constants which is part of assignment conversion. The designers of the Java programming language felt that including these implicit narrowing conversions would add additional complexity to the overloaded method matching resolution process.

    posted on 2010-07-08 15:11 gembin 閱讀(428) 評論(0)  編輯  收藏 所屬分類: JavaSE

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 亚洲日韩一区二区三区| 久久精品国产亚洲av影院 | 亚洲国产成人片在线观看| 日产久久强奸免费的看| 免费人成在线观看视频播放| 国产亚洲精品免费| 亚洲成a人一区二区三区| 一级**爱片免费视频| 亚洲尤码不卡AV麻豆| 日本免费在线观看| 亚洲欧洲精品久久| 女人18毛片a级毛片免费| 亚洲丶国产丶欧美一区二区三区| 国产精品冒白浆免费视频| 美女被爆羞羞网站在免费观看| 亚洲黄片手机免费观看| 免费成人高清在线视频| 91亚洲精品麻豆| 国产大片线上免费看| 暖暖免费中文在线日本| 国产亚洲精品美女久久久| 1000部拍拍拍18勿入免费视频软件 | 国产精品视频免费| 亚洲无人区码一二三码区别图片 | 亚洲国产天堂久久久久久| 青青操免费在线观看| 亚洲黄色网址大全| 国产极品美女高潮抽搐免费网站| 四虎成人精品国产永久免费无码| 亚洲阿v天堂在线| 日韩精品无码区免费专区| 免费无码午夜福利片| 亚洲精品视频在线| 国产又长又粗又爽免费视频 | 日韩在线一区二区三区免费视频| 亚洲夜夜欢A∨一区二区三区 | 999在线视频精品免费播放观看| 麻豆亚洲AV成人无码久久精品| 国产av天堂亚洲国产av天堂| 成人av免费电影| 久草免费福利资源站|