Является ли "эквивалент" таким же, как "равно" (или "абсолютно равный")?

Эти два термина всегда запоминались. Они логически одинаковы или совершенно разные? Например, в книге Java: Введение в программирование Ляна он говорит:

Вы можете использовать универсальный класс без указания конкретного типа, например:

GenericStack stack = new GenericStack(); // raw type

Это примерно эквивалентно

GenericStack<Object> stack = new GenericStack<Object>();

1 ответ

Есть много уровней равенства. Обычно они обозначаются словами "равно" или "эквивалент". Что именно означают эти слова, зависит от контекста, но обычно равенство подразумевает эквивалентность, а не наоборот.

Например, учитывая две части кода A и B, мы можем сказать, что A и B равны, если они состоят из абсолютно одинаковых символов, и сказать, что они эквивалентны, если мы всегда можем заменить A на B, и наоборот, без изменение поведения программы. Если мы сделаем это,

int i;
i = 10;

а также

int i = 10;

не равны, но эквивалентны.

Два фрагмента кода в вашей цитате названы автором "примерно эквивалентными". Слово "грубо" говорит о том, что они совсем не эквивалентны. И действительно:

GenericStack stack = new GenericStack();
GenericStack<String> stack2 = stack;

компилирует (с предупреждением), тогда как

GenericStack<Object> stack = new GenericStack<Object>();
GenericStack<String> stack2 = stack;

не.

Автор имеет в виду "примерно эквивалентно" то, что необработанный тип ведет себя как GenericStack<Object> во многих, но не во всех случаях. В частности, вы можете поместить в него любой предмет.

Другие вопросы по тегам