guava - InetAddress.coerceToInteger返回int而不是long

Ido*_*Ido 4 java inetaddress guava

我有一个关于Guava的InetAddress.coerceToInteger方法的问题.

根据文档的方法:

public static int coerceToInteger(InetAddress ip)

'返回表示IPv4地址的整数,无论​​提供的参数是否为IPv4地址."

但是,IPv4范围是无符号的32位,而Java的int是有符号的 - 意味着返回的值只能覆盖相关IPv4范围的一半.

我错过了某人或方法中存在真正的问题吗?

谢谢

Pet*_*rey 8

32位值是32位值,无论是有符号还是无符号,它都可以有2 ^ 32个值.如果您的地址为192.168.0.1,则为负数,不会丢失任何信息.如果将其转换为字节(也是有符号的),则不会丢失任何信息.

顺便说一句:对于IPv4地址,你可以使用这个技巧

int address = ip.hashCode();
Run Code Online (Sandbox Code Playgroud)

要将32位有符号值视为32位无符号值,您可以

int address32 = ...
long address = address32 & 0xFFFFFFFFL;
Run Code Online (Sandbox Code Playgroud)

但是,在大多数情况下,您不需要这样做.