请解释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())
);
答案 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()
方法。
我希望你明白这一点。