Где находится исходный код для продвижения типа Java и как его отладить - PullRequest
0 голосов
/ 27 сентября 2018

Я в основном хочу отладить следующий код для Type Promotion, чтобы понять временную двойную переменную, созданную для x.Как я могу это сделать?

public class TypePromotion {
public static void main(String args[]){
    int x = 10;
    double y = 20.0;
    double z = x + y;

    System.out.println("value of Z is :: "+z); // outputs 30.0
    System.out.println("value of X is :: "+x); // outputs 10
}}

1 Ответ

0 голосов
/ 27 сентября 2018

Ответ на ваш вопрос (насколько я понимаю) содержится в спецификации языка Java:

https://docs.oracle.com/javase/specs/jls/se11/html/jls-5.html#jls-5.6.2 https://docs.oracle.com/javase/specs/jls/se11/html/jls-15.html#jls-15.18.2

Когда вы используете оператор (в этомcase +) для пары операндов (x и y) результирующий числовой тип определяется этими определениями.

Чтобы добавить немного больше деталей, если вы разберете файл класса, сгенерированный вашим кодом, соответствующие инструкции:

   0: bipush        10
   2: istore_1
   3: ldc2_w        #2                  // double 20.0d
   6: dstore_2
   7: iload_1
   8: i2d
   9: dload_2
  10: dadd
  11: dstore        4

Как вы можете видеть, x сохраняется как int, yхранится как двойнойx помещается в стек, а затем конвертируется в double.После того, как y помещен в стек, можно выполнить dadd (двойное добавление), поскольку оба операнда являются двойными.Компилятор javac генерирует код, который соответствует спецификации языка Java, как описано выше.

...