Метод get () Hashmap возвращает значение null, но при сравнении с нулевыми значениями false - PullRequest
0 голосов
/ 22 сентября 2019

Существует хэш-карта

HashMap<String,ArrayList<String>> hm = new HashMap<>();

Имеет эти значения

entertain - have, 

some - one, 

very - extremely, actually, really, super, 

auto - car, 

lunch - meal, 

wagon - car, 

truck - car, 

Постановка задачи

System.out.println("test " + hm.get("delicious")); //prints null


System.out.println("test " + hm.get("delicious") == null); //prints false

почему второй оператор печати печатает false, еслиэто не печатать правда?

Ответы [ 2 ]

2 голосов
/ 22 сентября 2019

Выражение, переданное методу println, вычисляется слева направо.Сначала String «тест» объединяется с hm.get("delicious"), и только затем выход сравнивается с null.

Следовательно:

System.out.println("test " + hm.get("delicious") == null);

эквивалентно:

System.out.println(("test " + hm.get("delicious")) == null);

"test " +hm.get("delicious") определенно не null (на самом деле он равен String "test null"), поэтому печатается false.

System.out.println("test " + (hm.get("delicious")==null));

будет печатать "проверка верна ".

0 голосов
/ 22 сентября 2019

Прежде чем мы попытаемся найти решение этого вопроса, мы должны понять, что именно находится null в памяти?Или Что такое значение null в Java?

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

Давайте перейдем к фактическому вопросу.следующий код внутренне используется Java для сравнения.

public static boolean compare(String str1, String str2) {
    return (str1 == null ? str2 == null : str1.equals(str2));
}

Надеюсь, теперь вы можете понять, почему ваша программа говорит false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...