Почему «5» .equals (5) не соответствует истине?Разве они не оба они одинаковые, оба по 5? - PullRequest
0 голосов
/ 28 ноября 2018

Я новичок в Java, и мне было интересно, почему "5" .equals (5) оценивают как истинное значение, и оба являются 5, и на мой взгляд, это одно и то же (они кажутся мне равными), так почему бы неэто оценить это правда?

Я благодарен за любую помощь :)

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Более глубокий взгляд на функцию, которую она на самом деле делает:

Он проверяет, является ли отправленное вами значение экземпляром String.

public boolean equals(Object value) {
    if (value instanceof String){
       // continue comparing..
    }else{
       return false;
    }
}

, если значение не равно 'В случае String метод вернет false, в вашем случае 5 - экземпляр Integer.

Именно поэтому метод вернет false.

0 голосов
/ 28 ноября 2018
 "5".equals(5);

можно записать в виде:

 "5".equals(new Integer(5));

Просто чтобы прояснить: в конце вы сравниваете объект String с объектом Integer (если действительно существует вызов new Integer(),или Integer.valueOf() звонок здесь не имеет значения).В классе String нет метода equals(int), поэтому компилятор превращает литерал int в целочисленный объект для вас (который называется boxing ).

Дело в том, что в Java equals() методы (чаще всего) принимают во внимание тип объектов.Строка не может быть равна Integer, никогда.Независимо от «контента», который «представляют» разные объекты ».

0 голосов
/ 28 ноября 2018

«5» - это строка, а 5 - целое число, а метод .equals также сравнивает тип

...