【问题三】 int 与 Integer 的转换
int 到 Integer
int a = 3;
Integer A = new Integer(a);
或
Integer A = Integer.valueOf(a);
Integer 到 int
Integer A = new Integer(5);
int a = A.intValue();
而 Integer.parseInt(String str)
则是将String类型转为int 类型。
int 与 Integer的区别与联系
int类型是放在栈空间的,Integer是作为对象放在堆空间的;
int 是基本类型,不是类,为了符合面向对象编程,后来出现了Integer 类,它是对int进行封装的。
int不是对象,是java原始的数据类型,它默认值为0。
Integer是个对象,它有自己的方法,默认值为NULL。
为什么要对基本类型进行对象包装呢?
-
因为类能提供必要的方法,用于实现基本数据类型的数值与可打印字符串之间的转换,以及一些其他的实用方法。
-
另外,有些数据结构库类只能操作对象,而不支持基本数据类型的遍历,包装类提供一种便利的方式,能够把基本数据类型转换成等价的对象,从而可以利用数据结构库类进行处理。
总之,无论做了什么都应该不是“白做”,而是有目的的,能够方便我们更好的编码与使用。
【问题四】 String 通过Integer.parseInt 转 int 时, 报错NumberFormatException
问下面的代码的运行结果是什么?会出现异常吗,是运行时期的异常还是编译时期的异常.为什么????
public class A {
public static void main(String[] args) {
String s = "";
int a = Integer.parseInt(s);
System.out.println(a);
}
}
结果:会出现异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
编译可以通过,因为s有值,而运行时会出现数字转换异常,空的字符串不能转换为int
数字转换异常,便是空的字符串不知道应该转成什么样的int数。由此,引发的一个注意点,便是,通过Integer.parseInt()
,解析字符串时,一定要确保 字符串的实际值 必须是数字,且只能是数字。
【示例】
【源码分析】 解释为什么 空字符串 会报错