Java中的类型转换(双/双)

时间:2014-07-07 09:13:47

标签: java type-conversion

请解释Java中的类型转换(Double / double,Integer / integer,...)是如何工作的。

为什么只有最后一个例子有效?

     setLocation(double, double);

     // This don't work
     player.setLocation((Double) jsonMsg.get("x"), (Double) jsonMsg.get("y"));

     // This don't work too   
     player.setLocation((double) jsonMsg.get("x"), (double) jsonMsg.get("y"));

     // It's ok!
     player.setLocation( Double.parseDouble(jsonMsg.get("x").toString())
                       , Double.parseDouble(jsonMsg.get("y").toString())
                       );

3 个答案:

答案 0 :(得分:1)

似乎您的jsonMsg.get("x")返回对象哪个字符串表示形式可以转换为双重类型值。

您的setLocation方法需要两个double类型参数,即声明为

setLocation(double a, double b)

要将字符串转换为double,您需要调用Double.parseDouble()。它将参数字符串解析为double值并返回它。

<强>更新

在java中,无法将对象变量强制转换为基本类型。因此,您需要调用Double类的解析方法,以将此字符串对象转换为double类型值。

答案 1 :(得分:0)

在Java 1.5之后,Java在Wrapper类(Integer,...)和Primitive类型(int,...)之间隐式地进行类型转换。

但是你在前两个步骤中尝试做的是将Object / String转换为Double,这是不允许的,需要像Double.parseDouble(jsonMsg.get(“x”)。toString()这样的显式操作或新的Double(“1.2”)。

由于

答案 2 :(得分:0)

注意:String是一个对象,如果要将对象类型转换为基本类型,则必须使用包装/覆盖类。你无法投射

Java为每种原始数据类型都有包装类。举个例子:

  

int - 整数

     

double - Double

包装类具有操作原始数据类型和将对象转换为原始数据类型的方法。举个例子:

  

对于int - Integer.parseInt()

     

对于double - Double.parseDouble()

在您的代码段最后一行:

Double.parseDouble(jsonMsg.get("x").toString()

你正在解析字符串以使其正确加倍是正确的,并且在你试图投射的其他两行中。在一个使用包装类:

player.setLocation((Double) jsonMsg.get("x"), (Double) jsonMsg.get("y"));

和其他使用primitve类型的人:

player.setLocation((double) jsonMsg.get("x"), (double) jsonMsg.get("y"));

两者都不正确。由于jsonMsg.get("x")返回String个对象。您必须使用.toString()将其转换为字符串,并将其解析为double

注意:当我们需要对象的字符串表示时,使用toString()方法。

我希望你明白这一点。