В Java, какая разница, если я передам метод arg как - myMethod (myObjectReference) или myMethod (новый MyObject)?

Предположим, моему методу нужен объект в качестве аргумента, будет ли разница между ними? И какой из них следует предпочесть?

public static void methodOne(){
   myMethod(new MyObject());

}

public static void methodOne(){
  MyObject objRef = new MyObject();
  myMethod(objRef);
}

Первый не компилируется. new MyObject -> new MyObject()

Michael 02.04.2019 12:40

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

SPlatten 02.04.2019 12:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
64
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

В первом примере у вас нет возможности получить доступ к экземпляру MyObject после вызова метода, а в примере 2 вы все еще можете получить к нему доступ, поскольку вы присвоили экземпляр переменной.

Итак, если вам нужно/хотите повторно использовать экземпляр, перейдите, например, 2. Если вам просто нужен экземпляр в методе, вы можете перейти, например, 1 (хотя вы также можете просто создать его в mthod -> вообще без аргумента)

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

Еще одна вещь, касающаяся второго примера: если вы вносите изменения в экземпляр, переданный методу, эти изменения сохранятся в вашем methodOne

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

Для фрагмента кода, которым вы поделились, первый подход был бы чище.

Если вам нужна ссылка на объект, вы должны использовать второй вариант, в противном случае первый вариант будет лучше, потому что вы собираетесь создать «временную» переменную, переданную функции, и JVM может выполнить небольшую оптимизацию в памяти. потому что вы не сохраняете ссылку на эту переменную. Кроме того, если вам не нужна ссылка, я думаю, что второй вариант дает более читаемый код.

Это зависит от того, что вы хотите сделать с этим объектом. Если вы хотите использовать его после выполнения метода, вам нужно назначить его как объект.

Что-то еще, вам нужно:

public static void methodOne(){
   myMethod(new MyObject());
}

В противном случае он не будет компилироваться.

Зависит от области видимости переменных.

Каждый входной параметр метода/функции отправляется как значение. Но если вы отправили объект как параметр, вы отправите его ссылку как значение.

public static void methodOne(){
  MyObject objRef = new MyObject();
  myMethod(objRef);
}

В качестве второго примера кода objRef можно использовать для всего methodOne(). Но это плохая идея модифицировать objRef функцию с недействительными возвратами.

В вашем первом примере вы отправили новый объект (он инициирован с пустым конструктором параметров), но вы не можете его повторно использовать.

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

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