NumberFormatException异常

异常描述:

当Integer()括号内是String类型的字符串时,编译不会报错,但是运行会出现NumberFormatException异常。
即:Integer()括号内只能存放数字。

代码演示:

public class IntegerTest04 {
    public static void main(String[] args) {
    	//手动装箱
        //Integer a = new Integer("汉语");//报错
        Integer b = new Integer(1000);
        System.out.println(b);//1000
        //Integer c = new Integer("abc");//报错
    }
}

扩展:

Integer使用时,当数字在【-128~127】这个区间之内用==做比较,如果数据相同,则相等。
原因:在方法区类加载时已经存在了这个整数型常量池,使用时,直接从整数型常量池中取出来。
反之,超过该范围比较则比较的是内存地址。需要用equals比较

代码演示:

/*
* 自动拆箱和自动装箱只有在加减乘除运算时才会触发*/
public class IntegerTest03 {
    public static void main(String[] args) {
        //自动装箱:将基本数据类型转换为包装类型
        Integer x = 1000;
        //自动拆箱,将包装类型转换为基本数据类型,并加1.
        System.out.println(x + 1);//1001
        Integer y = 1000;
        //"=="比较的是内存地址。
        System.out.println(x==y);//false

        /*例外:Integer面试题
        * Java中为了提高程序的执行效率,将【-128~127】之间所有的包装对象提前创建好,
        * 放到了一个方法区的“整数型常量池”中,目的时只要用这个区间的数据不需要再new了,
        * 直接从整数型常量池当中取出来。
        * 池:cache,就是缓存机制--大型项目中的重要手段
        * */
        Integer a = 127;
        Integer b = 127;
        //当数字在【-128~127】这个区间之内用==做比较,如果数据相同,则相等
        System.out.println(a == b);//true
    }
}

版权声明:本文为weixin_45144691原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。