Java 比较未知整数类型的数字对象
我试图比较两个运行时类型未知的Java 比较未知整数类型的数字对象,java,casting,Java,Casting,我试图比较两个运行时类型未知的对象,但至少可以保证该类型是某种形式的Number。有没有一种方法可以比较基类为Number的对象,而不显式地将该对象强制转换为Java的一种整数类型 例如: objectobject1=(整数)5; objectobject2=(整数)6; 如果(对象1>对象2){ //显然不会编译 } 如果((编号)对象1>(编号)对象2){ //这当然也不会编译 } 我认为实现这一点的唯一方法是使用instanceof检查每个整数类型,并执行显式转换。但也许有一种更干净的方
对象
,但至少可以保证该类型是某种形式的Number
。有没有一种方法可以比较基类为Number
的对象
,而不显式地将该对象强制转换为Java的一种整数类型
例如:
objectobject1=(整数)5;
objectobject2=(整数)6;
如果(对象1>对象2){
//显然不会编译
}
如果((编号)对象1>(编号)对象2){
//这当然也不会编译
}
我认为实现这一点的唯一方法是使用
instanceof
检查每个整数类型,并执行显式转换。但也许有一种更干净的方法可以做到这一点。如果您知道它们将是数字,您可以使用:
Object object1 = Integer.valueOf(5);
Object object2 = Float.valueOf(6);
Number number1 = (Number) object1;
Number number2 = (Number) object2;
if (number1.doubleValue() < number2.doubleValue()) {
System.out.println("number1 < number2");
}
object1=Integer.valueOf(5);
objectobject2=Float.valueOf(6);
Number number1=(Number)object1;
Number number2=(Number)object2;
if(number1.doubleValue()
当然,您也可以进行内联铸造。只有两种“整数”类型的
Number
:Integer
和Long
,而整数可以安全地表示为Long
Number
类型具有该方法,因此您可以安全地强制转换到Number
并比较调用该方法的结果:
if (((Number)object1).longValue() > ((Number)object2).longValue())
要比较某事,你必须知道怎么做。所以你不能拿未知的东西和其他东西比较
运算符<>仅为基元类型定义
要比较的对象实现可比较的接口。您可以检查对象是否实现了它,并调用compareTo方法来比较相同类型的对象。所有常见的java数字类型(Integer、Short、BigDecimal)都实现了可比性。用数字类型的泛型定义一个方法如何?我认为将所有类型都视为双精度不会造成任何损失。这是否适用于Long
?我的理解是,它们可以是任何数字,包括Float和Double。有了long,你可能会失去精确性。我想这是一个失去什么的问题。将6.5与6或非常大但始终为整数的数字进行比较。如果类型为Double
,则转换为long不会丢失该精度吗?@user0000001实际上相反,使用Double会丢失精度。问题指定了整数类型,这意味着整数
或长
。大的Long
值不能准确地表示为双精度值,并且将它们转换为双精度值时会失去精度。Java使用的“数字”部分最多只使用53位,因此大于2^54的长值在转换为双精度时只是近似值。