Java Integer.valueOf() vs Integer.parseInt()的区别与示例
在Java中,Integer.parseInt()和Integer.valueOf()方法都用于将字符串转换为整数。这些静态方法属于java.lang包中的Integer类,并且如果字符串不是有效的整数表示,则会抛出NumberFormatException异常。但是,这里的问题是为什么Java提供了具有相同功能的两个方法。虽然它们用于执行相似的任务,但在语法和返回类型方面存在一些区别。在本文中,我们将通过示例程序来解释Integer.parseInt()和Integer.valueOf()方法的区别。
Java中的Integer.parseInt() vs Integer.valueOf()
Java中的Integer.parseInt()方法
Integer.parseInt()方法接受一个字符串参数,并将其解析为原始整数值。如果我们想将指定的字符串转换为其他数字系统,如二进制和十六进制,我们可以通过提供第二个参数来实现,该参数是数字系统的基数或基础。例如,如果我们想解析一个十六进制字符串,可以将16作为基数传递。
语法
Integer.parseInt(string val1, int val2);
在这里,整数参数’val2’是可选的,也被称为基数。
示例1
以下示例演示了Integer.parseInt()方法的使用。
public class Example1 {
public static void main(String[] args) {
String stVal = "42";
// converting string into integer
int n1 = Integer.parseInt(stVal);
int n2 = Integer.parseInt(stVal, 16); // hexadecimal value
// printing the result
System.out.println("n1 = " + n1 + " , n2 = " + n2);
}
}
输出
n1 = 42 , n2 = 66
Java中的Integer.valueOf()方法
Integer.valueOf()方法可以接受字符串、字符或整数作为参数,但返回一个包含解析整数值的Integer对象。它还可以通过传递所需数系统的基数或基数参数将指定的字符串转换为其他数系统。
语法
Integer.valueOf(val1, val2);
这里,整数参数 ‘val2’ 是可选的,也称为基数。
示例2
以下示例演示了Integer.valueOf()方法的使用。
public class Example2 {
public static void main(String[] args) {
String stVal = "42";
// converting string into integer
int n1 = Integer.valueOf(stVal);
int n2 = Integer.valueOf(stVal, 16); // hexadecimal value
// printing the result
System.out.println("n1 = " + n1 + " , n2 = " + n2);
}
}
输出
n1 = 42 , n2 = 66
Integer.valueOf()和Integer.parseInt()方法的区别
以下表格显示了Integer.valueOf()和Integer.parseInt()方法之间的区别:
Integer.valueOf() | Integer.parseInt() |
---|---|
其返回类型是一个Integer包装对象。 | 其返回类型是原始整数值。 |
它可以接受字符串、字符或整数作为参数。 | 它只接受String类型对象。 |
当我们将字符作为参数传递时,它将返回对应的ASCII值。 | 当我们将字符作为参数传递时,编译器会抛出错误。 |
Integer.valueOf()可以为了更好的性能而缓存一些值,这意味着使用相同的值调用该方法可能会返回相同的对象引用。 | 调用Integer.parseInt()方法总是会创建一个新的整数值。 |
现在,让我们讨论一些更多的示例,以更清晰地理解这两种方法之间的区别。
示例3
正如之前提到的,如果我们传递一个错误的整数的字符串表示,这两种方法都会抛出一个NumberFormatException。让我们来看一下。
public class Example3 {
public static void main(String[] args) {
String s = "42.03";
// converting string into integer
int n1 = Integer.parseInt(s);
int n2 = Integer.valueOf(s);
// printing the result
System.out.println("n1 = " + n1 + " , n2 = " + n2);
}
}
输出
Exception in thread "main" java.lang.NumberFormatException: For input string: "42.03"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:665)
at java.base/java.lang.Integer.parseInt(Integer.java:781)
at Example3.main(Example3.java:5)
示例4
如果我们将一个字符作为参数传递给Integer.parseInt()方法,我们将遇到“不兼容的类型:char无法转换为String”错误,如下面的示例所示。
public class Example4 {
public static void main(String[] args) {
char chs = 't';
// converting character into integer
int n1 = Integer.parseInt(chs);
// printing the result
System.out.println("n1 = " + n1);
}
}
输出
Example4.java:5: error: incompatible types: char cannot be converted to String
int n1 = Integer.parseInt(chs);
示例5
如果我们向Integer.valueOf()方法传递一个字符作为参数,那么代码将正常运行并返回相应的ASCII值。我们也可以传递一个整数类型的值。
public class Example5 {
public static void main(String[] args) {
int val1 = 56;
char chs = 't';
// converting character into integer
int n1 = Integer.valueOf(chs);
// converting the integer value
int n2 = Integer.valueOf(val1);
// printing the result
System.out.println("n1 = " + n1 + " , n2 = " + n2);
}
}
输出
n1 = 116 , n2 = 56
结论
Integer.parseInt()和Integer.valueOf()都是非常有用的方法,用于将字符串转换为整数。通常情况下,如果我们需要一个基本的int值,我们可以使用Integer.parseInt()方法,如果我们需要一个Integer包装对象,我们可以使用Integer.valueOf()方法。Integer.valueOf()方法的性能比Integer.parseInt()方法快很多。