将类型强制为变量会使整个语句成为插入的类型吗?

Does forcing a type into a variable make the whole statement into the inserted type?

我对双精度类型是否会将 width 的变量更改为双精度或仅 length 感到两难:

double ratio = (double) length / width;

变量长度和宽度的类型在执行该行后不会改变。您在声明这些变量时赋予它们的类型保持不变是的。假设width和length是int类型,我写了下面的小程序来检查类型。

public class CheckType{

    void printType(int x) {
        System.out.println(x + " is an int");
    }

    void printType(double x) {
        System.out.println(x + " is an double");
    }
    
    public static void main(String []args){
         int length=6; int width=2;
         double ratio = (double) length / width;
         CheckType x = new CheckType();
         
         System.out.println(length);
         System.out.println(width);
         x.printType(ratio);
         x.printType(length);
         x.printType(width);

     }
}

上述程序的输出是:

6
2
3.0 is an double
6 is an int
2 is an int

它有效地改变了两者。

您的表达式 (double) length / width 等同于 ((double) length) / width。但是 Java 语言没有定义将 double 除以与 double 不同类型的值。因此 width 在执行除法之前隐式 提升 为双精度数。

就我个人而言,有时我会写这样的表达式 (double) length / (double) width 来使发生的事情更清楚。这是我在其他地方从未见过的做法,我相信很多程序员会发现我的代码不必要地长。

幕后究竟发生了什么,我不知道,我们也不必关心。如果某些 JVM 有办法将 double 除以 int,它可以使用它,只要它 保证给出与 [=] 相同的结果。 =14=] 已转换为 double。语言指定我们代码的结果,而不是实现

Nishadi Wickramanayaka 在另一个答案中是正确的:变量本身没有改变。变量 lengthwidth 都没有改变它们的类型。只有从变量中获取的值才会转换为 double 以用于计算。