【问题标题】:Type conversion in Java (Double / double)Java中的类型转换(双/双)
【发布时间】:2014-07-07 09:13:47
【问题描述】:

请解释 Java 中的类型转换(双精度/双精度、整数/整数等)如何工作。

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

     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())
                       );

【问题讨论】:

标签: java type-conversion


【解决方案1】:

您的jsonMsg.get("x") 似乎返回了一个对象,该对象的字符串表示可以转换为双精度类型值。

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

setLocation(double a, double b)

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

更新:

在 java 中,不可能将对象变量转换为原始类型。所以需要调用Double类的解析方法,将这个字符串对象转化为double类型的值。

【讨论】:

    【解决方案2】:

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

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

    谢谢

    【讨论】:

      【解决方案3】:

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

      Java 对每个原始数据类型都有包装类。例如:

      int   - 整数

      双-双

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

      对于 int - Integer.parseInt()

      对于双精度 - Double.parseDouble()

      在你的代码 sn -p 最后一行:

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

      您正在解析 String 以使其翻倍是正确的,并且在其他两行中您正在尝试强制转换。在一个使用包装类:

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

      还有一个使用原始类型:

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

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

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

      我希望你明白这一点。

      【讨论】:

      • 你怎么知道jsonMsg.get("x")返回什么?
      • 抱歉@shmosel 犯了那个错误。我正在参考 git repo 并编辑此答案
      • 谁说jsonMsgJSONObject
      猜你喜欢
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多