Java中的int类型始终是32位吗?

91

Java中的int会永远且无处不在地是一个32位有符号整数吗?


用于表示int值的位数是常量Integer.SIZE,它在Java 1.5中被指定为public static final int SIZE = 32; - burnabyRails
4个回答

132

是的,在Java语言规范中有定义。

来自第4.2节:基本类型和值

整数类型包括byteshortintlong, 它们的值分别为8位、16位、32位和64位带符号 的二进制补码整数, 还有char,它的值是16位无符号整数, 表示UTF-16代码单元(§3.1)。

此外,还有来自第4.2.1节:整数类型和值的信息:

整数类型的值在以下范围内:

  • byte范围为-128至127,含两端
  • short范围为-32768至32767,含两端
  • int范围为-2147483648至2147483647,含两端
  • long范围为-9223372036854775808至9223372036854775807,含两端
  • char范围为'\u0000'到'\uffff',即0到65535

11

int是32位的。如果需要更多,可以使用long,它是64位的。


9
Java 8增加了一些对无符号整数的支持。原始类型int仍然是有符号的,但是一些方法将会将它们解释为无符号的。
以下方法在Java 8中被添加到Integer类中:
  • compareUnsigned(int x, int y):比较两个无符号整数。
  • divideUnsigned(int dividend, int divisor):将两个无符号整数相除。
  • parseUnsignedInt(String s):将给定字符串解析为无符号整数。
  • parseUnsignedInt(String s, int radix):以给定基数将字符串解析为无符号整数。
  • remainderUnsigned(int dividend, int divisor):返回两个无符号整数相除的余数。
  • toUnsignedLong(int x):将int类型的无符号整数转换为long类型。
  • toUnsignedString(int i):将int类型的无符号整数转换为十进制字符串。
  • toUnsignedString(int i, int radix):将int类型的无符号整数转换为指定基数的字符串。
下面是一个使用示例:
public static void main(String[] args) {
    int uint = Integer.parseUnsignedInt("4294967295");
    System.out.println(uint); // -1
    System.out.println(Integer.toUnsignedString(uint)); // 4294967295
}

5
作为补充,如果64位长度不符合您的要求,请尝试使用java.math.BigInteger。这适用于数字超出64位长的情况。
public static void main(String args[]){
    
    String max_long = "9223372036854775807";
    String min_long = "-9223372036854775808";
    
    BigInteger b1 = new BigInteger(max_long);
    BigInteger b2 = new BigInteger(min_long);
    
    BigInteger sum = b1.add(b1);
    BigInteger difference = b2.subtract(b1);
    BigInteger product = b1.multiply(b2);
    BigInteger quotient = b1.divide(b1);
    
    System.out.println("The sum is: " + sum);
    System.out.println("The difference is: " + difference);
    System.out.println("The product is: " + product);
    System.out.println("The quotient is: " + quotient);
    
}

输出结果如下:

总和为:18446744073709551614

差值为:-18446744073709551615

乘积为:-85070591730234615856620279821087277056

商为:1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接