Присвоение выражения - явление компиляции или выполнения - PullRequest
1 голос
/ 03 февраля 2011

У меня были сомнения,

Любая операция присваивания выражения время компиляции или явление во время выполнения?
e.g Foo f=new Bar();

Спасибо.

Ответы [ 4 ]

4 голосов
/ 03 февраля 2011

Если вы компилируете следующее:

int x = 34 + 45;

тогда назначаемое вами выражение будет оцениваться во время компиляции, поскольку оно включает только постоянные базовые типы. В большинстве других случаев, включая ваш пример, выражение будет оцениваться во время выполнения.

2 голосов
/ 03 февраля 2011

Я не знаю, в чем именно вы сомневаетесь, но я думаю, что во время компиляции текстовое представление программы переводится в машинно-понятную форму (в случае Java это будет Java-байт-код).То же самое происходит с такими операциями, как назначения.Во время выполнения такие операции выполняются.Таким образом, чтобы точно ответить на ваш вопрос, операция присваивания является феноменом как компиляции, так и времени выполнения (в обоих случаях выполняются определенные действия - в случае компиляции они выполняются компилятором Java, а во время выполнения - JVM).

Например,

class Foo { }
class Bar { }
Foo f = new Bar();

Этот код будет отклонен компилятором.Вам будет кричать, что вы пытаетесь назначить несовместимые типы.

1 голос
/ 03 февраля 2011

И то, и другое.

  1. Время компиляции - во время компиляции присваивается анализ на предмет совместимости типов, внедрения кода для преобразования / упаковки / распаковки и т. Д. Даже некоторый потоканализ может повлиять на присвоение, например, переменная и ее назначение могут быть полностью оптимизированы.

  2. Время выполнения - фактическое назначение значения, т.е. изменение битов в ячейке памяти переменной, изКонечно, происходит во время выполнения.

1 голос
/ 03 февраля 2011

Его время выполнения

Foo f будет означать Object созданное время выполнения Bar во время выполнения.

Для него есть проверка времени компиляции.Bar должно быть Foo для успешной компиляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...