Java-识别整数和双精度

时间:2010-10-08 02:06:46

标签: java types

我想写一个条件语句,取决于变量是int还是double,即

if (x is a double)
  do stuff
else if(x is an int)
  do stuff
else
  do stuff

我知道这可能不是一个好主意,但它是我现在唯一的选择。这可能吗?

4 个答案:

答案 0 :(得分:4)

我不知道在编译时你不知道x是一个int还是一个double,但是

void dostuff(int x) {
    do stuff...
}

void dostuff(double x) {
    do stuff...
}

然后

dostuff(x)

将调用适当的方法。

答案 1 :(得分:1)

编辑添加: 根据您对原始问题的评论,我认为这个问题不是您想要的。我将对另一个问题发表评论,试图为yoru真正的问题提供一些帮助。

正如蜥蜴比尔所说,你会在编译时知道原语是什么类型的:

public void foo(int x, double y){...}

另一方面,如果你将你的类型放在另一个对象中,比如

Vector v = new Vector();
v.add((int)1);
v.add((double)1.0));

然后你真的处理的是对象而不是原始对象。每个原语都有一个对应的类:

  • int具有Integer
  • double有Double
  • float有Float
  • boolean has Boolean

您可以使用instanceof关键字来确定您正在处理的类型(您可以对任何类执行此操作):

if( x instanceof Double ) {
  doDoubleThing();
} else if( x instanceof Integer ) {
  doIntegerThing();
} // and so on

答案 2 :(得分:1)

我猜你在试图检查数字是否有小数部分。

double n;
if(n-floor(n)>0)
    it has a decimal part
else
    it's an integer

答案 3 :(得分:0)

如果您有能力使用两种方法,atk写的内容是有效的。如果这不是一个选项或你不想这样做(个人认为它可能更可读,更少重复有一个方法,只是做一个if-else分支,取决于你的代码),你可以使用反射:

Class intClass = Integer.class;
Class doubleClass = Double.class;
if intClass.isInstance(foo)
    bar();
else if doubleClass.isInstance(foo)
    spam();
else
    eggs();

这可能不一定是最好的解决方案。只是觉得你应该知道它。