int为double或double为int

时间:2015-01-06 04:00:25

标签: java

所以我基本上想知道,java会自动将int转换为double还是double转换为int。

为了更清楚地看一下这个例子: 说出这个标题的位置

 public static void doThis (int n, double x)

在main方法中我们声明了这样的东西:

doThis(0.5,2);

这是无效通话吗?

怎么样?

doThis(3L,4);

这最后两个

doThis(3,4);
doThis(2.0,1.5);

由于

5 个答案:

答案 0 :(得分:2)

int类型的值可以隐式转换为double,但反之亦然。

鉴于此声明:

public static void doThis (int n, double x)

这些是合法的:

doThis(1, 0.5); // call doThis with an int and a double
doThis(1, (double)2); // second int is converted to a double, then passed
doThis(1, 2); // same as above; the compiler automatically inserts the cast
doThis((int)3.5, 0.5); // first double is converted to an int, then passed
doThis((int)3.5, 42); // the double is converted to an int, and the int is converted to a double

而这些不是:

doThis(5.1, 0.5); // the compiler will not automatically convert double to int
doThis(5L, 0.5); // nor will it convert long to int

自动转换规则背后的意图是,如果这样做可能会丢失数据,编译器将不会自动转换类型。例如,(int)4.5为4,而不是4.5 - 忽略小数部分。

答案 1 :(得分:1)

您可以传递int字面值,其中需要双精度,但反之亦然。如果您尝试编译以下示例,则可以自己查看。

public class MWE{ 
    public static void doThis (int n, double x) {

    }
    public static void main(String[] args) {
        doThis(0.5,2); // Compiler error
        doThis(3L,4);// Compiler error
        doThis(3,4); // No Error
        doThis(2.0,1.5); // Compiler error
    }
}

答案 2 :(得分:1)

你可以这样做,你可以在需要int时传递double(它由编译器输入)。

但你无法通过double代替int

here以上的更多信息。

答案 3 :(得分:1)

传递不同类型的值时,有几条经验法则:

  1. 浮点不能代替整数,但反过来也可以。
  2. 具有较高但深度的相同类型(整数或浮点)的基元不能替代具有较低位深度的基元,但反过来是可能的。
  3. 替换只是Java编译器的自动转换。您始终可以手动投射。

    为了澄清,浮点类型为floatdouble,而整数类型为byteshortint和{{1 }}

    在这种情况下,long是一个浮点,double是一个整数。您可以替换int代替int,但不能替代double

答案 4 :(得分:0)

在方法调用中,每个参数值都可以应用任何这些转换(JLS 5.3):

  

5.3。方法调用转换

     

方法调用上下文允许使用以下之一:

     
      
  • 身份转换(第5.1.1节)

  •   
  • 扩大基元转换(§5.1.2)

  •   
  • 扩大参考转换(第5.1.5节)

  •   
  • 拳击转换(§5.1.7),可选地后跟加宽引用   转化

  •   
  • 取消装箱转换(第5.1.8节),可选地后跟加宽   原始转换。

  •   

在这个例子中,我们正在处理primitive widening conversion

  

5.1.2。扩大原始转换

     

对原始类型的19个特定转换称为扩展   原始转换:

     
      
  • byteshortintlongfloatdouble

  •   
  • shortintlongfloatdouble

  •   
  • charintlongfloatdouble

  •   
  • intlongfloatdouble

  •   
  • longfloatdouble

  •   
  • floatdouble

  •   

正如您在列表中看到的那样,从int转到double完全没问题,但事实恰恰相反。