<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 閱讀(440) 評論(0)  編輯  收藏 所屬分類: JavaSE

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(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
    主站蜘蛛池模板: 内射少妇36P亚洲区| 亚洲中文字幕无码一区 | 永久免费不卡在线观看黄网站| 亚洲国产精品无码观看久久| 免费视频爱爱太爽了| 亚洲自偷自拍另类图片二区| 中文无码日韩欧免费视频| 亚洲中文字幕视频国产| 久久精品无码专区免费| 亚洲精品国产精品乱码在线观看| 91亚洲精品麻豆| 国产成人午夜精品免费视频| 亚洲日韩一区二区三区| 国产在线不卡免费播放| 理论秋霞在线看免费| 在线观看亚洲精品福利片| 久久精品免费网站网| 老汉色老汉首页a亚洲| 中文字幕免费在线看线人 | 亚洲高清免费视频| 高清免费久久午夜精品| 亚洲成a人片在线观看老师| 丁香花在线观看免费观看图片| 日韩一级免费视频| 国产亚洲成在线播放va| 亚洲国产主播精品极品网红| APP在线免费观看视频| 亚洲日韩国产精品无码av| 国产美女被遭强高潮免费网站 | 国产一级理论免费版| 一级免费黄色大片| 一区二区三区亚洲| 亚洲精品动漫免费二区| 免费人成大片在线观看播放| 亚洲AV永久青草无码精品| 搡女人免费视频大全| fc2免费人成在线视频| 亚洲美女一区二区三区| 亚洲av成人一区二区三区在线观看 | 国产成人AV片无码免费| 亚洲人成网站18禁止|