Java-表达式中的类型转换问题

Java-表达式中的类型转换问题,java,Java,我刚开始学习Java并练习一些示例程序。下面是我正在尝试的代码 /* Using a cast */ class UseCast { public static void main(String agrs[]) { int i; double d; for (i = 0; i < 5; i++) { System.out.println(i + " / 3 with cast to double i

我刚开始学习Java并练习一些示例程序。下面是我正在尝试的代码

/*
   Using a cast
 */
class UseCast {
    public static void main(String agrs[]) {

        int i;
        double d;

        for (i = 0; i < 5; i++) {
            System.out.println(i + " / 3 with cast to double is " + (double) i
                    / 3);

            // > Why is the parenthesis around (i / 3) changing the result
            System.out.println(i + " / 3 with cast to double is "
                    + (double) (i / 3));
            System.out.println();

        }
    }
}
/*
使用石膏
*/
类UseCast{
公共静态void main(字符串agrs[]){
int i;
双d;
对于(i=0;i<5;i++){
转换为双精度的System.out.println(i+”/3是“+(double)i
/ 3);
//>为什么(i/3)周围的括号会改变结果
System.out.println(i+“/3,转换为双精度is”
+(双份)(i/3));
System.out.println();
}
}
}
第一个输出按预期工作。 在第二个输出中,
(i/3)
似乎首先被计算为整数,然后被提升为双精度以便打印。如果我想将表达式求值为double,并且仍然在
i/3
周围保留括号,该怎么办。怎么做?

你当然可以

((double) i / 3) 

如果坚持将强制转换保留在整个表达式之外,则可以将
i
或3中的一个乘以1.0:

(double) (i * 1.0 / 3)
但是现在强制转换是多余的,因为表达式的计算结果已经是双精度的

您得到的结果是,在Java中,数字默认为
int

i/3
将根据int计算进行计算,当得到结果(0)时,将应用强制转换。

int/int
被视为整数除法,给出整数结果。
分子或分母中的任何一个都必须是双精度的,才能给出十进制答案。

您可能应该在不进行打字的情况下执行以下操作:

System.out.println(i + " / 3 with cast to double is "
                + (i / 3d));

对于您的情况,您是对的,它是
int/int
除法,然后您将类型转换为double,这没有任何区别。

最简单的方法如下: (i/3.0)

(int/int)此处的除法将被视为整数除法


(int/dbl)或(dbl/int)或(dbl/dbl)这里的除法将被视为浮点除法

感谢大家提供这么多不同的方式:)