Я добавлю это к дальнейшему ответу @ assylias.
Если вы посмотрите исходный код InetAddress.getByName
, вы заметите, что все, что он на самом деле делает, это вызывает InetAddress.getAllByName
. Если вы посмотрите на источник для этого метода, вы увидите следующее к концу:
InetAddress[] ret = new InetAddress[1];
if(addr != null) {
if (addr.length == Inet4Address.INADDRSZ) {
ret[0] = new Inet4Address(null, addr);
} else {
if (ifname != null) {
ret[0] = new Inet6Address(null, addr, ifname);
} else {
ret[0] = new Inet6Address(null, addr, numericZone);
}
}
return ret;
}
Там вы можете видеть, что InetAddress.getAllByName
пытается определить, к какой версии IP относится адрес. Затем он создает объект Inet4/6Address
на основе формата вашей входной строки.
Следовательно, поскольку вы получаете Inet4Address
или Inet6Address
, и они оба имеют полную реализацию getAddress
, вы никогда не вызовете метод InetAddress.getAddress
.