Integer与Int类型有什么区别呢?
我们知道integer是int的包装--装箱。为什么要有这种语法呢,有种说法是提供了一种更加面向对象的途径。但是个人感觉意义不大。
Integer的出现使得基本数据类型可以像对象一样被操作。
public class IntInteger {
public static void main(String [] args){
Integer inte = new Integer(0); //3
System.out.println(inte);
int i;
Int i = new Int(); //6
System.out.println(i);
}
}
如上所示:第6行会报错。但是第三行是可以编译运行的。
由此可见Integer可以跟普通的class一样实例化,但是基本数据类型就不可以。
另外一点区别就是初始值:Integer的初始值是null,而int的初始值是0.
这点很容易理解。
再写两条代码来简单的比较一下:
Integer inte = new Integer(null);
System.out.println(inte);
当执行如上代码时会报错:
Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.<init>(Unknown Source)
at integer.IntInteger.main(IntInteger.java:6)
这是因为传入了一个不能转换成int类型的值时,就会抛出number类型异常的错误。
来看源码:
public Integer(String s) throws NumberFormatException {
this.value = parseInt(s, 10);
}
参数除了可以是int类型的,还可以是String类型的。
当传入一个String类型的参数时,输出的时候会转换成十进制输出,举个栗子:
Integer inte = new Integer("2412412");
System.out.println(inte);
这个结果是:
2412412
String intege = "哈哈大笑";
System.out.println(intege);
这个依然会报相同的错误。
来看NumberFormatException的定义: if the {@code String} does not contain a parsable integer.
由此可见并不是所有的String类型都可以,即使编译通过,但是运行期依然会报错。这是很正常的。