我收到一个数值输入参数,它是一个String数据类型(我无法更改),我需要检查收到的这个值是否为某个数字。即检查值是否为5。
知道String数据类型的接收值,但在任何时候它都应该只包含数字。我首先将值转换为整数数据类型,然后执行相等性测试。即案例B如下所示。
案例A:
String expected = "3";
if(expected.equals(actual)) //...
案例B:
int expected = 3;
int actualInt = Integer.parseInt(actual);
if(expected == actualInt) //...
我想知道使用案例B进行相等测试是否有任何缺点,因为我更倾向于以这种方式做出正确的出路。
答案 0 :(得分:4)
使用Try-Catch:
int expected = 3;
int actualInt;
try
{
actualInt = Integer.parseInt(actual);
if(expected == actualInt) //...
}
catch(NumberFormatException ex)
{
// You will reach here when a bad input is given to the parseInt method
// Handle the failure
}
catch(Exception e)
{
// All other exceptions here
}
即使您知道字符串总是具有“数字”值,但实现异常处理仍然是一种很好的做法。比安心更安全:)
答案 1 :(得分:2)
如果你只是要进行等式检查,那么我认为案例A没问题,因为你没有做任何需要你的数字而不是字符串的操作。
我只能看到案例B的缺点,就是你必须解析字符串中的数字以进行相等检查。
但是案例B的优点是,如果你需要确保字符串实际上是一个整数,那么你必须使用案例B.
答案 2 :(得分:1)
您是否考虑过在String类中使用静态工厂方法valueOf()的重载版本。
String使用这些方法来隐式地将对象转换为相应的字符串表示。
这是一个例子。
int expected = 3;
String.valueOf(expected).equalsIgnoreCase(actual); // is the equality check for numbers.
假设'actual'是传递的参数。您可能希望对变量'actual'进行空检查。