我有一个名为Person的类,大致如下:
public abstract class Person {
private String birthNo;
...
}
挪威出生证号码为11位,并采用此维基百科页面所述的算法构建。我不能使用int,因为大多数出生证号码超过
Integer.MAX_VALUE
。我听说在决定是否应该使用String或整数来存储数字值时,你应该问自己:我需要对这个值执行数学运算吗?
我正在对
birthNo
执行此操作,但是很多操作使用String的charAt(int i)
会更容易一些。如果我将出生证号码存储为long,我将不得不使用模数和除法来获取所需的数字:
int ninth = Character.getNumericValue(birthNo.charAt(8));
与
int ninth = birthNo / 100 % 10
我想要进行的数学运算是获取人的性别(如果第九位数字为偶数,则为女性),并使用类似于ISBN的算法验证出生证号码。使用String的另一个理由是,某些出生证号码可能具有前导零,因此如果将其存储为long,则不会是“11位数字”。
什么是首选解决方案?对于数学运算,使用Long还是为了方便使用String?
LocalDate
创建一个包装类来处理这个问题。 - Robert BainPerson
类添加getBirthNumberAsLong
和getBirthNumberAsString
方法。或者创建一个BirthNumber
类,其中包含asLong
/asString
方法。然后如何存储就不重要了。 - HollowaylocalDate.getDayOfMonth()
。 - Martin M J