Последний сегмент IP-адреса

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

При использовании оператора == для сравнения строк вы не сравниваете содержимое строки , но фактически сравнивают адрес памяти. Если они равны, в противном случае они вернут true и false. Если значение равно в строке, сравнивает содержимое строки.

Итак, вопрос в том, что все строки кэшируются в системе, как получается == возвращает false, тогда как equals возвращает true? Ну, это возможно. Если вы создадите новую строку, например String str = new String("Testing"), вы создадите новую строку в кеше, даже если в кеше уже содержится строка с тем же содержимым. Короче говоря, "MyString" == new String("MyString") всегда будет возвращать false.

Java также говорит о функции intern (), которая может использоваться в строке, чтобы сделать ее частью кеша, поэтому "MyString" == new String("MyString").intern() вернет true.

Примечание: == оператор намного быстрее, чем равен только потому, что вы сравниваете два адреса памяти, но вы должны быть уверены, что код не создает новые экземпляры String в коде. В противном случае вы столкнетесь с ошибками.

0
задан jeevjyot singh chhabda 10 March 2019 в 00:12
поделиться

2 ответа

Обычно, это не имеет значения, если у вас есть X.X.X.001 или .01 или .1 для последнего октета. См. Мои результаты пинга на 192.168.0.1 и .01 и .001 => все они приводят к .1 ping results

0
ответ дан Dakta Moriamé 10 March 2019 в 00:12
поделиться

Это почти полностью зависит от реализации вашего ping, но наиболее вероятной причиной является то, что 08 трактуется как восьмеричное число , потому что оно начинается с 0.

И, поскольку действительные восьмеричные цифры ограничены 0..7, предполагается, что это не числовой IP-адрес, а вместо этого имя , которое нужно искать (в DNS для пример).

Это восьмеричное поведение может быть подтверждено (под Windows) следующей расшифровкой:

C:\Users\Pax> ping 192.168.1.061
Pinging 192.168.1.49 with 32 bytes of data:
Reply from 192.168.1.61: Destination host unreachable.
:

061, по-видимому, считалось восьмеричным из первой строки выходных данных, поскольку 618 (6x8+1) = 4910 , Последующие строки, хотя они утверждают, что проверяет адрес .61, являются ложными. Это потому, что это мой фактический аппарат, и, если я делаю это без начального нуля, он работает нормально:

C:\Users\Pax>ping 192.168.1.61
Pinging 192.168.1.61 with 32 bytes of data:
Reply from 192.168.1.61: bytes=32 time<1ms TTL=128
:

Если восьмеричный бит содержит не восьмеричную цифру, это , когда он начинает жаловаться на сам хост, а не просто на недоступность (или, что еще хуже, пинг не на том компьютере):

C:\Users\Pax>ping 192.168.1.61
Pinging 192.168.1.61 with 32 bytes of data:
Reply from 192.168.1.61: bytes=32 time<1ms TTL=128
:

C:\Users\Pax>ping 192.0168.1.61
Ping request could not find host 192.0168.1.61.
    Please check the name and try again.
0
ответ дан paxdiablo 10 March 2019 в 00:12
поделиться
Другие вопросы по тегам:

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