将类型强制为变量会使整个语句成为插入的类型吗?
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 在另一个答案中是正确的:变量本身没有改变。变量 length
和 width
都没有改变它们的类型。只有从变量中获取的值才会转换为 double
以用于计算。
我对双精度类型是否会将 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 在另一个答案中是正确的:变量本身没有改变。变量 length
和 width
都没有改变它们的类型。只有从变量中获取的值才会转换为 double
以用于计算。