Я считаю, что заблуждение заключается в том, что переменная не может содержать объект для начала. Если вы это поймете, то очевидно, что переменные могут содержать только ссылки на объекты (или примитивные значения). Оттуда к пониманию того, что ссылки передаются по значению (так же, как примитивные значения), довольно мало.
Существует очень простой тест, который вы можете сделать, чтобы выяснить, поддерживает ли язык передачу по ссылке. Спросите себя, можете ли вы написать функцию подкачки на языке, то есть что-то вроде
x == A, y == B
swap(x, y);
x == B, y == A
Как программист на Java, вы быстро понимаете, что не можете реализовать это в Java, поэтому вы (правильно) сделаете вывод, что Java не имеет передачу по ссылке.
Возвращаясь к вашим предложениям:
- В Java примитивы передаются по значению, а объекты передаются по ссылке.
Это false . Я бы сказал, что вы можете передавать только то, что содержится в переменной, и, как я уже говорил выше, переменная не может содержать объект, поэтому вы не можете передавать объект вообще в Java.
- В Java ничего не передается по ссылке, а ссылки передаются по значению.
Это true .