Java中的“基本类型”、“包装类型”和“String类型”之间的相互转换

一切尽在代码中


package package0002;

public class WrapperClass {
    public static void main(String[] args) {


        /* 基本类型————>包装类型 */

        /**
         * 可以直接把基本类型的变量赋值给包装类(或者说引用);
         * 实际上在这里,编译器自动地调用了包装类的{@code valueOf()}方法;
         * 这只是一个语法糖,而非真正的把基本类型赋值给了包装类型。
         */
        //#statement001-001
        Integer intNum1 = 23;
        //#statement001-002
        Float floatNum1 = 3.14F;
        //#statement001-003
        Double doubleNum1 = 3.1415926;
        //#statement001-004
        Short shortNum1 = 223;
        //#statement001-005
        Long longNum1 = 666L;
        //#statement001-006
        Byte byteNum1 = 127;
        //#statement001-007
        Character charWord1 = 'k';
        //#statement001-008
        Boolean bool1 = true;

        /**
         * 用包装类的构造方法实例化一个包装类对象,入参为对应的基本类型;
         * 值得一提的是:java的基本数据类型中,整型的默认类型是{@code int},浮点型的默认类型是{@code double}。
         */
        //#statement002-001
        Integer intNum2 = new Integer(23);
        //#statement002-002
        Float floatNum2 = new Float(3.14F);
        //#statement002-003
        Double doubleNum2 = new Double(3.1415926);
        //#statement002-004
        short shortValue2 = 223;
        Short shortNum2 = new Short(shortValue2);    //这里直接在括号内写数值的话,编译器会把它认作 int 类型,什么鬼???
        //#statement002-005
        Long longNum2 = new Long(666L);
        //#statement002-006
        byte byteValue2 = 127;  //必须注意的是 byte 类型的取值是 -128~127,超过这个数值会被默认为 int 类型
        Byte byteNum2 = new Byte(byteValue2);   //同上#statement002-004,真奇葩!
        //#statement002-007
        Character charWord2 = new Character('k');
        //#statement002-008
        Boolean bool2 = new Boolean(true);

        /**
         * 使用包装类的静态方法{@code valueOf()},入参为对应的基本类型;
         */
        //#statement003-001
        Integer intNum3 = Integer.valueOf(23);
        //#statement003-002
        Float floatNum3 = Float.valueOf(3.14F);
        //#statement003-003
        Double doubleNum3 = Double.valueOf(3.1415926);
        //#statement003-004
        short shortValue3 = 223;
        Short shortNum3 = Short.valueOf(shortValue3);
        //#statement003-005
        Long longNum3 = Long.valueOf(666L);
        //#statement003-006
        byte byteValue3 = 127;
        Byte byteNum3 = Byte.valueOf(byteValue2);
        //#statement003-007
        Character charWord3 = Character.valueOf('k');
        //#statement003-008
        Boolean bool3 = Boolean.valueOf(true);


        /* 包装类型————>基本类型 */

        /**
         * 使用包装类的实例方法{@code *Value()};
         */
        //#statement006-001
        int intvalue6 = intNum3.intValue();
        //#statement006-002
        float floatValue6 = floatNum3.floatValue();
        //#statement006-003
        double doubleValue6 = doubleNum3.doubleValue();
        //#statement006-004
        short shortValue6 = shortNum3.shortValue();
        //#statement006-005
        long longValue6 = longNum3.longValue();
        //#statement006-006
        byte byteValue6 = byteNum3.byteValue();
        //#statement006-007
        char charValue6 = charWord3.charValue();
        //#statement006-008
        boolean boolValue6 = bool3.booleanValue();


        /* String类型————>包装类型 */

        /**
         * 同样用构造方法来实现;是以{@code value}为入参的构造方法的重载;
         * 用包装类的构造方法实例化一个包装类对象,入参为字面量对应的{@code String}类型;
         * 必须注意的是:{@code Character}类是没有这个方法的,因为String怎么可以转成char嘛!
         * 还有就是:字符串字面量是不能超出类型本身的取值范围或者类型不匹配的,否则会报错;
         * 比如:{@code Integer intNum3 = new Integer("sug")},肯定会报错,因为{@code "sug"}不是一个合法的int类型;
         * 再比如{@code Byte byteNum3 = new Byte("369")}也会报错,因为{code 369}超过了byte类型的取值范围,
         */
        //#statement004-001
        Integer intNum4 = new Integer("23");
        //#statement004-002
        Float floatNum4 = new Float("3.14F");
        //#statement004-003
        Double doubleNum4 = new Double("3.1415926");
        //#statement004-004
        Short shortNum4 = new Short("223");
        //#statement004-005
        Long longNum4 = new Long(666L);
        //#statement004-006
        Byte byteNum4 = new Byte("127");
        //#statement004-008
        Boolean bool4 = new Boolean("true");

        /**
         * 使用包装类的静态方法{@code valueOf()},入参为字面量对应的{@code String}类型;
         * 同理,{@code Character}类没有这个方法;
         */
        //#statement005-001
        Integer intNum5 = Integer.valueOf("23");
        //#statement005-002
        Float floatNum5 = Float.valueOf("3.14F");
        //#statement005-003
        Double doubleNum5 = Double.valueOf("3.1415926");
        //#statement005-004
        Short shortNum5 = Short.valueOf("223");
        //#statement005-005
        Long longNum5 = Long.valueOf("666L");
        //#statement005-006
        Byte byteNum5 = Byte.valueOf("127");
        //#statement005-008
        Boolean bool5 = Boolean.valueOf("true");


        /* 包装类型————>String类型 */
        /* 基本类型————>String类型 */

        /**
         * 使用包装类的静态方法{@code toString()};
         */
        //#statement007-001
        String intStr7 = intNum2.toString();
        String intStr71 = Integer.toString(23);
        //#statement007-002
        String floatStr7 = floatNum2.toString();
        String floatStr71 = Float.toString(3.14F);
        //#statement007-003
        String doubleStr7 = doubleNum2.toString();
        String doubleStr71 = Double.toString(3.1415926);
        //#statement007-004
        String shortStr7 = shortNum2.toString();
        short shortValue71 = 223;
        String shortStr71 = Short.toString(shortValue71);
        //#statement007-005
        String longStr7 = longNum2.toString();
        String longStr71 = Long.toString(666L);
        //#statement007-006
        String byteStr7 = byteNum2.toString();
        byte byteValue71 = 127;
        String byteStr71 = Byte.toString(byteValue71);
        //#statement007-007
        String charStr7 = charWord2.toString();
        String charStr71 = Character.toString('k');
        //#statement007-008
        String boolStr7 = bool2.toString();
        String boolStr71 = Boolean.toString(true);


        /* String类型————>基本类型 */

        /**
         * 使用包装类的静态方法{@code parse*()};
         * 同理,{@code Character}类没有这个方法;
         */
        //#statement008-001
        int intNum8 = Integer.parseInt("23");
        //#statement008-002
        float floatNum8 = Float.parseFloat("3.14F");
        //#statement008-003
        double doubleNum8 = Double.parseDouble("3.1415926");
        //#statement008-004
        short shortNum8 = Short.parseShort("223");
        //#statement008-005
        long longNum8 = Long.parseLong("666L");
        //#statement008-006
        byte byteNum8 = Byte.parseByte("127");
        //#statement008-008
        boolean bool8 = Boolean.parseBoolean("true");
        
        /**
         * 其实在这么多方法的背后,更多的是原理;
         * 在平时的代码中,若非必须,可以直接用“=”来连接包装类型和基本类型;
         * 因为在Java5以后的版本中,编译器会自动帮你装箱拆箱。
         */
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容