Java中何时进行自动加宽转换
加宽原语转换在程序中何时发生? 如果我得到一个表达式:Java中何时进行自动加宽转换,java,casting,type-conversion,Java,Casting,Type Conversion,加宽原语转换在程序中何时发生? 如果我得到一个表达式: long l = 3L; double d = 5.2L + l; 是将5.2L和l转换为double然后再进行计算,还是在长时间内进行计算,然后将结果转换为double?您的原始代码 long l = 3L; double d = 5.2L + l; 将不会编译,因为5.2L不是有效的文本 在回答您进一步的问题时: 如果是5L,会发生什么情况 在这种情况下,您将添加两个long,结果将是一个long。如果将该long存储在double
long l = 3L;
double d = 5.2L + l;
是将5.2L和l转换为double然后再进行计算,还是在长时间内进行计算,然后将结果转换为double?您的原始代码
long l = 3L;
double d = 5.2L + l;
将不会编译,因为5.2L
不是有效的文本
在回答您进一步的问题时:
如果是5L,会发生什么情况
在这种情况下,您将添加两个long,结果将是一个long。如果将该long存储在double
变量中,它将转换为double
如果涉及到一个整数,会发生什么
如果你加上一个int和一个long,你会得到一个long。如果将其分配给
double
变量,则随后会将其转换为double 语句a=b+c
由两个操作组成:
- 加法运算符
说: 对操作数()执行二进制数字提升 说:+
- 加宽基元转换()用于转换以下规则指定的一个或两个操作数:
- 如果任一操作数的类型为
,则另一个操作数将转换为double
double
- 否则,如果任一操作数的类型为
,则另一个操作数将转换为float
float
- 否则,如果其中一个操作数的类型为
,则另一个操作数将转换为long
long
- 否则,两个操作数都将转换为类型
int
- 如果任一操作数的类型为
- 赋值运算符
说: 赋值上下文允许将表达式的值()赋值给变量;表达式的类型必须转换为变量的类型 分配上下文允许使用以下内容之一:=
- 身份转换()
- 加宽原语转换()
到字节
,短
,整数
,长
,或浮点
双精度
至short
,int
,long
,或float
double
到char
,int
,long
,或float
double
到int
,long
或float
double
到long
或float
double
到float
double
若要重新封顶,第一个,
+
运算符将两个操作数加宽为int
、long
、float
或double
,以先覆盖两个操作数的为准。+
运算符的结果可以进一步加宽,以适合赋值变量。两者都不适用<代码>5.2L不是有效的文本。哦,对了。我的错。但如果它是5L,会发生什么情况呢?如果它是5L,你会加上两个长,再加上一个长,然后转换成双精度。谢谢你的回答。如果涉及到一个整数,会发生什么?比如“int i=2;long l=10;double d=5L+l/i”是以long计算的术语,或者变量是否先转换为double?如果加上int和long,结果将是long。