Подтвердить что ты не робот

Почему Java-поддержка не проходит по ссылке, например, С++

Я читал каждый раз, когда этот примитивный тип данных и ссылки на объекты передаются по значению?

Я попробовал поиск в Google, почему поддержка java не проходит по ссылке, но Я только получаю java, не поддерживает pass by reference и Я не мог найти повода для этого.

Почему вы не можете передавать примитивный тип данных по ссылке?

Изменить: Большинство людей закрыли мой вопрос, предполагая, что он субъективен и аргументирован.

Ну, это не так, у него есть определенный ответ, мой вопрос в том, почему вы не можете создать объект абстрактного класса, и он не дублируется, потому что большая часть ответа просто говорит НЕТ.

Спасибо.

4b9b3361

Ответ 1

По дизайну:

Некоторые люди скажут неправильно, что объекты передаются "по ссылке". В дизайн языка программирования, термин правильно пройти по ссылке, означает, что когда аргумент передается функция, вызываемая функция получает ссылка на исходное значение, а не копию его стоимости. Если функция изменяет его параметр, значение в код вызова будет изменен потому что аргумент и использование параметра тот же слот в памяти.... Java язык программирования не проходит объекты по ссылке; он передает объект ссылки по значению. Потому что два копии той же ссылки относятся к тот же фактический объект, внесенные изменения через одну ссылочную переменную видимый через другой. Там есть точно один режим передачи параметров - пройти по значению - и это помогает поддерживать все просто. - Джеймс Гослинг и др., Язык программирования Java, 4-е издание

Что касается более глубоких причин, то здесь я беру: это комбинация двух фактов:

  • Последняя строка цитаты Гослинга: "... это помогает держать вещи простыми..."
  • В отличие от С++, Java - это мусор, собранный со всеми объектами, выделенными в куче.

Я не могу помочь, если вам не нравится первый. Вам придется рассказать Джеймсу Гослингу и Биллу Джой и всем другим людям, которые разработали Java, что они сделали критическую ошибку. Удачи с этим. Java сегодня гораздо более широко используется, чем С++ сегодня несколькими способами. Рынок, каким бы несовершенным он ни был, не наказывает Java за то, что вы воспринимаете как надзор.

Передача по значению в С++ переносит нагрузку на обоих разработчиков (например, требования о назначении и конструкторах копирования) и писателя компилятора (например, дифференциация между переменными стека и кучи, все перестановки для передачи по значению и ссылке с константой и не константой).

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

Ответ 2

Мое понимание заключается в том, что причина отсутствия передачи по ссылке в основном по соображениям безопасности: передача объектов по ссылке позволит функции изменять материал, который находится за пределами его области действия, а это означает, что мой объект (ссылка) может быть заменяется, если я вызываю вредоносную функцию.

Чтобы разработать: на Java, инкапсуляция важна и мера безопасности. Когда вы указываете (указатель) объекту на функцию, которую написал кто-то другой, я (как вызывающий) должен быть уверен, что вызываемая мной функция может делать только с этим объектом то, что я ему разрешил (используя публичные элементы). Разрешение PBR оставит меня (как вызывающего) в неизвестном состоянии после завершения функции, поскольку я не знаю, обрабатываю ли я свой объект или что-то еще...