Выражения совпадают, если операнды являются строками; в противном случае +
может добавить их вместо этого в зависимости от преобразования типов. &
гарантирует, что вы не получите ничего, кроме конкатенации строк, и преобразует операнды в строки, если это возможно.
В MSDN есть запись о Операциях конкатенации в Visual Basic , которая объясняет это:
Оператор & (Visual Basic) определен только для операндов String, и он всегда расширяет свои операнды до String, независимо от значения Option Strict. Оператор & рекомендуется для конкатенации строк, поскольку он определен исключительно для строк и снижает ваши шансы на генерацию непреднамеренного преобразования.