Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类型转换混乱_Java_Casting - Fatal编程技术网

Java类型转换混乱

Java类型转换混乱,java,casting,Java,Casting,以这两个代码段为例: 案例1: Scanner s = new Scanner(System.in); int n = s.nextInt(); /** take user input **/ n *= Double.NEGATIVE_INFINITY; int k=10; double kk = 10.10; int rst = k*kk; 及 案例2: Scanner s = new Scanner(System.in); int n = s.nextInt(); /** take

以这两个代码段为例:

案例1:

Scanner s = new Scanner(System.in);
int n = s.nextInt(); /** take user input **/

n *= Double.NEGATIVE_INFINITY;
int k=10;
double kk = 10.10;

int rst = k*kk;

案例2:

Scanner s = new Scanner(System.in);
int n = s.nextInt(); /** take user input **/

n *= Double.NEGATIVE_INFINITY;
int k=10;
double kk = 10.10;

int rst = k*kk;

在这两种情况下,我没有从我这边进行任何类型转换,但案例1正确执行并打印
n
的值,但案例2抛出错误,
无法从double转换为int
。为什么会有这种差异?

在java中,整数(
int
)与浮点相乘的结果总是会产生浮点(
double
)。您正在将此结果分配给需要强制转换的整数
rst

第一个有效,第二个无效,因为
*=
+=
-=
添加自动强制转换

例如,如果您将第二个示例更改为

int k=10;
double kk = 10.10;
k*= kk;
它应该会起作用。或者,您可以只添加显式强制转换,如so
rst=(int)(k*kk)

Java中的算术提升在应用算术时发生 对具有不同数据类型的两个变量的操作。在这种情况下 编译器将转换二进制中一个操作数的数据类型 对另一个操作数的类型进行算术运算

在您的例子中,要将int和double相乘,int将提升为double,结果是double。所以,它不能存储到int中


更多信息请参见:

,因为
*=
(和
+=
及其亲属)是在左参数的类型中计算的。但是,
*
将参数“升级”为“最宽”参数的类型。因为
n*=Double.NEGATIVE_INFINITY
n=(int)(n*Double.NEGATIVE_INFINITY)
请参见@exception1:您的链接几乎解决了我的疑问…谢谢!!!:)投票关闭用户@exception给出的线程副本在
案例1
中不也会发生同样的事情吗???乘法值被分配回
int
??@NoobEditor-是的,非常正确。