Как == оператор, реализованный в Java?

Можно сделать следующее:

ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted ; bash"

Таким образом, Вы разберетесь в оболочке на directory_wanted.

<час>

Объяснение

-t выделение псевдотерминала Силы. Это может использоваться для выполнения произвольных основанных на экране программ на удаленной машине, которая может быть очень полезной, например, при реализации сервисов меню.

опции Multiple -t вызывают tty выделение, даже если ssh не имеет никакого локального tty.

  • , Если Вы не используете -t тогда, никакая подсказка не появится.
  • , Если Вы не добавляете ; bash тогда, соединение будет закрыто и возвратит управление Вашей локальной машине
9
задан Community 23 May 2017 в 12:00
поделиться

4 ответа

Оператор == просто сравнивает ссылки.

Ссылки в JVM - это просто стандартный указатель на объект. Это работает с одним 32-битным или 64-битным целым числом (в зависимости от платформы).

Когда вы сравниваете две объектные ссылки, вы на самом деле просто сравниваете два 32-битных или 64-битных целых числа, и если они совпадают, вы приравнять к равному. Целочисленные значения - это место в памяти.

10
ответ дан 4 December 2019 в 13:48
поделиться

Поскольку ссылка - это просто число, сравнение ссылок сводится к простому сравнению двух чисел. Хеширование не требуется.

3
ответ дан 4 December 2019 в 13:48
поделиться

Оператор == сравнивает ссылки на объекты, чтобы увидеть, идентичны ли они, т. е. они относятся к одному и тому же объекту в памяти.

Метод equals () сравнивает ссылки на объекты, чтобы определить, эквивалентны ли они, хотя и не обязательно идентичны. Реализация по умолчанию equals () использует оператор == , но часто имеет смысл переопределить это поведение. Например, вы можете захотеть, чтобы две ссылки BankAccount считались эквивалентными, если у них одинаковый номер счета, даже если они являются совершенно разными объектами.

2
ответ дан 4 December 2019 в 13:48
поделиться

Оператор == возвращает истину, если объекты являются одним и тем же объектом. Здесь нет доступа к hashCode () или equals ().

Попробуйте это, чтобы подтвердить:

public class Test {
    static void testEqualEqual(Integer I0, Integer I1, boolean IsEquals) {
        if(!(IsEquals == (I0 == I1)))
            throw new AssertionError();
    }
    static void testEqual(Integer I0, Integer I1, boolean IsEquals) {
        if(!(IsEquals == (I0.equals(I1))))
            throw new AssertionError();
    }
    static void testHash(Integer I0, Integer I1, boolean IsEquals) {
        if(!(IsEquals == (I0.hashCode() == I1.hashCode())))
            throw new AssertionError();
    }

    public static void main(String ... args) {
        testEqualEqual(   1,    1, true);
        testEqualEqual(2000, 2000, false);

        testEqual(   1,    1, true);
        testEqual(2000, 2000, true);

        testHash(   1,    1, true);
        testHash(2000, 2000, true);
        System.out.println("Done");
    }
}

Чтобы понять это, вы должны сначала знать, что номер 255 будет кэшироваться при автобоксовке. Это означает, что целое число 1 всегда один и тот же объект, но целое число 2000 всегда будет другим объектом.

Этот эксперимент показывает, что '==' возвращает истину, когда объекты одинаковы. В случае «1» это одно и то же число, и он возвращает истину. Но в случае, когда '2000' автоматически упаковывается в разные объекты, он возвращает false.

Эксперимент также показывает, что '==' не использует equals () или hashCode ().

Надеюсь, это поможет.

0
ответ дан 4 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: