2011-02-03 2 views

ответ

1

Его среда

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

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

+0

Ok. Спасибо Джигару! – Anonymous

+0

Добро пожаловать :) –

4

Если вы собираете следующее:

int x = 34 + 45; 

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

2

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

Например,

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

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

1

Его оба.

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

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

Смежные вопросы