Можно ли передать ссылкой в Java?

Мой коллега упоминает, почему мы используем RESTeasy для нашего текущего проекта в УСПОКОИТЕЛЬНЫЕ веб-сервисы в EE Java с RESTeasy (JAX-RS) :

Его ссылочная реализация, Джерси, не была выбрана, потому что мы испытали затруднения при интеграции его хорошо с EJB3 и Швом 2.0.

Мы используем реализацию RESTeasy JAX-RS, потому что мы не испытали никаких затруднений при интеграции его с нашим EJBs и Швом. Это также имеет достаточную документацию.

от Apache существует другая реализация, но я, haven’t попробовал его, потому что это использует более старую версию JAX-RS

Наконец, существую еще одна платформа для УСПОКОИТЕЛЬНЫХ веб-сервисов для Java под названием Restlet, но мы не одобрили его, потому что во время этой записи, это использует пользовательскую архитектуру, даже при том, что надлежащая поддержка JAX-RS находится в работах.

5
задан Cory Petosky 28 April 2010 в 21:11
поделиться

6 ответов

Нет, Java не может сделай это. Java передается только по значению. Он также передает ссылки по значению.

31
ответ дан 18 December 2019 в 05:17
поделиться

Передача по ссылке - это концепция, которую разработчики Java часто неправильно понимают, вероятно, потому, что они не могут этого сделать. Прочтите это:

http://javadude.com/articles/passbyvalue.htm

10
ответ дан 18 December 2019 в 05:17
поделиться

Самое близкое, что вы можете сделать, - это передать AtomicReference. Это может быть изменено вызывающим абонентом. Это довольно некрасиво, но ИМХО должно быть. Менять аргумент в методе - плохая идея.

0
ответ дан 18 December 2019 в 05:17
поделиться

Да, как вы отметили, Java передает ссылки по значению. Это хорошая тема для интервью для Java-программистов, большинство из которых, кажется, ошибаются.

0
ответ дан 18 December 2019 в 05:17
поделиться

С точки зрения C # Я могу пройти ссылочный тип по значению или по ссылка, это также верно для значения types

В C # относительно ошибочно говорить «передавать ссылочный тип по значению».

Вы не можете передать ссылочный тип по значению - вы можете передать ссылку на объект или ссылку на ссылку . В java вы не можете передавать ссылку на ссылку.

Однако ваше noddie-приложение делает различие немного более ясным.

1
ответ дан 18 December 2019 в 05:17
поделиться

Технически, как мы знаем, переменные, которые ссылаются на объекты, являются строго указателями на объект. При передаче объекта в качестве параметра методу указатель или ссылка копируются в переменную параметра. Java называет это «передачей по значению».

Итак, вы получаете по крайней мере две переменные, которые ссылаются на один и тот же объект. Если вы установите для переменной параметра значение null, другие переменные сохранят свое значение благодаря подсчету ссылок.

Если у вас есть следующий метод:

public void function(Person person) {};

И объект:

Person marcus = new Person();
marcus.name = "Marcus";

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

function(marcus);

Вы в основном получаете это в локальной области видимости метода:

Person person = marcus;

Если вы устанавливаете person = null , это не влияет на значение marcus . Это связано с подсчетом ссылок.

Однако, если вы сделаете это:

person.name = null;

Это также верно:

marcus.name == null;

У вас есть ссылка на исходный объект в переменной параметра. Изменение переменной параметра влияет на исходный объект. Вы можете делать все, кроме как установить для него значение null, и ожидать, что исходное значение также будет равно null. Подсчет ссылок предотвращает это.

1
ответ дан 18 December 2019 в 05:17
поделиться