Integer.valueOf() 与 Integer.parseInt() 示例对比
在Java中,`Integer.parseInt()`和`Integer.valueOf()`方法都用于将字符串转换为整数。这两个静态方法都属于`java.lang`包中的`Integer`类,如果字符串不是整数的有效表示,则会抛出`NumberFormatException`异常。但是,问题出现了:为什么Java要提供这两个功能相同的的方法呢?虽然它们用于执行类似的任务,但在语法和返回类型方面存在一些区别。在本文中,我们将通过示例程序解释`Integer.parseInt()`和`Integer.valueOf()`方法之间的区别。
Java中的`Integer.parseInt()`与`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`包装对象。 | 其返回类型是原始整数值。 |
它可以接受字符串、字符或整数作为参数。 | 它只接受字符串类型对象。 |
当我们传递字符作为参数时,它将返回相应的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()`都是将字符串转换为整数非常有用的方法。通常,如果我们需要原始整数值,可以使用`Integer.parseInt()`;如果我们需要`Integer`包装对象,可以使用`Integer.valueOf()`。`Integer.valueOf()`方法的性能明显快于`Integer.parseInt()`方法。