关于Integer

/**
 * 基本数据类型                   包装类型
 * ----------------------------------------------
 * byte                      java.lang.Byte      (父类是java.lang.Number)
 * short                     java.lang.Short     (父类是java.lang.Number)
 * int                       java.lang.Integer   (父类是java.lang.Number)
 * long                      java.lang.Long      (父类是java.lang.Number)
 * float                     java.lang.Float     (父类是java.lang.Number)
 * double                    java.lang.Double    (父类是java.lang.Number)
 * boolean                   java.lang.Boolean   (父类是java.lang.Object)
 * char                      java.lang.Character (父类是java.lang.Object)
 *
 * 八种基本数据类型,分别对应一个包装类,下面以Integer来学习,JDK5以后能够进行自动装箱和自动拆箱
 *     自动装箱:基本数据类型自动转换为包装类
 *     自动拆箱:包装类自动转换为基本数据类型
 *
 * 自动装箱和自动拆箱的好处是:方便编程
 */

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

        Integer x = 123;//123是基本数据类型,x是包装类型  这里发生的是基本数据类型自动转换为包装类型(自动装箱)

        int y = x;//这里的x是包装类型,y是基本数据类型,发生的是包装类型自动转换为基本数据类型(自动拆箱)

        Integer z = 456;// 该代码等同于Integer z = new Integer(456);
                        // 注意这里的z是一个引用,也是一个变量,z中保存的是对象的内存地址
        System.out.println(z + 1);//457,这里的z先发生了自动拆箱变成了基本数据类型,然后进行了加法运算

        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);//false

        Integer k = 127;
        Integer m = 127;
        System.out.println(k == m);//true
        /*
            为什么会出现上面不一样的情况呢?原因在于java为了提高程序运行效率,再Integer类加载时将[-128,127]区间所有256个整数
        型包装对象提前创建好,放到了方法区的“整数型常量池”当中,目的是只要用这个区间的包装类型对象不需要再new了,直接就可以从
        “整数型常量池”当中取出来。为此无论创建多少个对象它们的引用所指向的内存地址都相同,但是只要超出了这256个的区间就不一样了。
        其内存图见下图:Integer方法区整数型常量池。
         */
        /*
        总结一下之前所学的经典异常有:
              空指针异常:NullPointerException
              类型转换异常:ClassCastException
              数组下标越界异常:ArrayIndexOutOfBoundsException
              数字格式化异常:NumberFormatException
         */
        Integer w = new Integer("12");//本行代码没有问题
//        下行代码是将非数字型字符串转换成Integer包装类型对象就会出现异常(该异常编译期可以通过编译,但运行期报错)
//        Integer q = new Integer("oneTwo");//java.lang.NumberFormatException  数字格式化异常(运行期异常)

//       (重点) 将字符串转换成int,使用静态方法: static int parseInt(String s);
//        静态方法,传入参数String,返回int,网页上文本框中输入的是100,实际上是字符串"100",后台数据库中需要的是数字100,
//        这时java程序就需要使用该方法把字符串"100"转换成数字100
        int retValue = Integer.parseInt("123");//如果将"123"换成文字就会出现java.lang.NumberFormatException  数字格式化异常
        System.out.println(retValue + 100);//223

//        照葫芦画瓢学习其他包装类的方法
//        将字符串转换成double,使用静态方法:static double parseDouble(String s);
        double retValue1 = Double.parseDouble("3.14");
        System.out.println(retValue1 + 1);//4.140000000000001这个问题是double的精度问题不要纠结
//        将字符串转换成float,使用静态方法:static float parseFloat(String s);
        float retValue2 =Float.parseFloat("10.0");
        System.out.println(retValue2 + 1);//11.0

        /**
         * String、int、Integer之间相互转换
         */
//        String---->int
        int i1 = Integer.parseInt("100");//i1是int类型数字100;
        System.out.println(i1 + 1);//101,数字100和1相加
//        int ------>String
        String s1 = i1 + "";//这里进行的是字符串拼接
        System.out.println(s1 + 1);//1001,这里进行的是字符串拼接
//        也可以使用String.valueOf(int)
        String s2 = String.valueOf(456);
        System.out.println(s2 + 1);//4561,这里进行的是字符串拼接

//        int ------>Integer
        Integer h = 1000;//自动装箱
//        Integer---->int
        int i2 = h;//自动拆箱
//        String----->Integer
        Integer d = Integer.valueOf("789");
//        Integer---->String
        String s3 = String.valueOf(d);
    }
}

                                Integer方法区整数型常量池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值