use*_*344 43 java integer phone-number
我在我的一个应用程序中代表手机号码时遇到问题.
我想知道是否有一个Integer类允许你存储从0417254482开始的这样一个数字.也许使用字符串更合适?目前,当我试图用一个代表一个带有整数的电话号码时,双打长,我似乎存储随机数而不是我打算存储的数字.
Jon*_*eet 117
使用String.除了其他任何东西,如果你使用整数,你将无法存储前导零.你绝对不应该使用int(太小)float或double(太多的数据丢失风险 - 见下文); long或者BigInteger可能是适当的(除了领先的零问题),但坦率地说,我会去String.这样,您还可以存储用户输入的任何破折号或空格,以便更容易记住数字,如果您愿意.
在上面提到的"数据丢失"的条款float和double- float绝对没有足够的精度; double 可以工作,如果你高兴,你永远不会需要超过16位(比你得到一对夫妇较少long),但你必须非常,非常小心,任何地方,你从转换值回double给string,你得到了确切的值.许多格式转换会为您提供一个近似值,可能精确到10位有效数字 - 但您需要一个精确的整数.基本上,使用浮点电话号码是一个根本不好的主意.如果必须使用固定宽度的数字类型,请使用a long,但理想情况下,完全避免使用它.
man*_*war 36
想一想:电话号码真的是一个号码吗?使用电话号码添加(或进行其他算术运算)是否有意义?电话号码是代码,它们通常用数字表示,但这只是一个惯例,也许,在另一个国家也使用字母(我刚刚意识到,国际电话号码怎么样?他们有一个+开头.你.必须考虑你想要表达的事物的本质,然后找到最合适的表示.
使用 String 类型的私有字段创建您自己的 PhoneNumber 类来表示它。
public class PhoneNumber {
private String number;
public PhoneNumber(String number) {
//check validity of number
this.number = number;
}
//getter, comparator, etc...
}
Run Code Online (Sandbox Code Playgroud)
如果所有电话号码的长度相同,您也可以使用 long 或 BigInteger 表示数字,但要小心前导零。
电话号码并不是真正的整数(或字符串)。它是其他应该有自己的类的东西。
编辑:还有一件事:我不会为这个类实现一个setter,因为电话号码对象最好是不可变的
尽管电话号码是命名号码,但它们通常不是数字(例如前导零、国家/地区前缀 +XX、...)。
因此,在程序中正确表示电话号码有两种可能性:
String以保持整数那样的方式输入。使用为电话号码功能提供额外支持的自定义数据类型
public class PhoneNumber implements Comparable<PhoneNumber>{
private String countryCode;
private String areaCode;
private String subscriberNumber;
// Constructor(s)
// Getter
// HashCode + Equals
// compareTo
@Override
public String toString(){
return countrycode + " " + areaCode + " " + subscriberNumber;
}
}
Run Code Online (Sandbox Code Playgroud)