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
  • 赋值运算符
    =

    说:

    赋值上下文允许将表达式的值()赋值给变量;表达式的类型必须转换为变量的类型

    分配上下文允许使用以下内容之一:

    • 身份转换()
    • 加宽原语转换(
    说:

    19基元类型的特定转换称为扩展基元转换:

    • 字节
      整数
      浮点
      ,或
      双精度
    • 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。