这个方法就是返回一个 Integer 对象,只是在返回之前,看作了一个判断,判断当前 i 的值是否在 [-128,127] 区别,且 IntegerCache 中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新的对象。 在这里的话,因为程序初次运行,没有 59 ,所以,直接创建了一个新的对象。 int a2=59 ,这是一个基本类型,存储...
但是我们都知道byte占8位,28为256,byte最多可以表示256个不同的数值。 0000 0000~0111 1111128个 1000 0000~1111 1111128个 如果byte中0000 0000和1000 0000表示0浪费了内存,所以byte中1000 0000表示-128。 int类型的-129原码为1000 0000 0000 0000 0000 0000 1000 0001 补码为1111 1111 1111 1111 1111 1111...
因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值。 参考博客:GOFightingbyte类型数据范围分析
valueOf会将常用的值(-128 to 127)cache起来。当i值在这个范围时,会比用构造方法Integer(int)效率和空间上更好。
short是16位 int是32位 long是64位。不难理解,byte的最大正数就是 01111111 (最高位必须是0),也就是 127。那么你可能会想 byte的最小负数就是11111111 了,对不对? 这么想就大错特错了。让我们看看11111111这个二进制数表示多少。根据上面的提示 我们知道这是一个负数。它的值是先取反再加1 。11111111...
他们分别是byte、short、int、long、float、double、char、boolean 整型 其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样 byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) ...
int k = 1^(1 << 31 >> 31); printf("%d\n", k); } 答案:-2 1算术左移31位变为-128: 1000 0000 0000 0000 0000 0000 0000 0000 -128算术右移31 位变为-1: 1111 1111 1111 1111 1111 1111 1111 1111 -1与1抑或得-2 记异或的妙处(异或1) ...
Integer其实是int的包装类型。 在Java中,除了上面的这8种类型,其他的类型都是对象,保存的是引用,而非数据本身。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 Integer a=1000;Integer b=1000; 可能有些人认为是下面的简写: 代码语言:javascript ...
我们都知道,对于 int 进行比较,使用==即可判断。但是当对 Integer 类型进行判断时候,便不再是简单的数值比较了,而是对于对象间地址的比较,当生成的值处于-128 <= value <= 127(默认),底层会直接从其缓存IntegerCache中取出以提高效率,在这时候==是可以匹配的。
整型 其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样 byte的取值范围为-128~...