首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true?

奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true? 在回答这个问题之前,我们先来看看int和Integer的对比,一步步揭开问题的答案。...之内的数 Integer i = 127; Integer j = 127; System.out.println( i==j ); //true...而java API中对Integer类型的valueOf的定义如下,对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127...加大对简单数字的重利用,Java定义在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象。 2....而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象。

2.2K31

似乎你总也记不住,byte取值范围是 -127~128 还是 -128~127

那么绘制出一个表格如下; byte 序号 8 7 6 5 4 3 2 1 2ⁿ 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 值 128 64 32 16 8 4 2 1 +127...0 1 1 1 1 1 1 1 -128 1 0 0 0 0 0 0 0 +127 二进制求和 1 2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7 2= 2^(n+1) - 1 3...= 127 -128 二进制求和 1 2^8 2= 128 好了,现在看懂逻辑就很清晰了,为什么是负数到-128,因为1代表负数的符号位,也就整整好好是2的8次方,-128。...也就是 -128~127 与 0~255 的转换处理; 比如我们现在将一个java中byte=120,转换成 0~255取值范围的数值; 一般可以进行与运算; 1120 & 0x0FF 同时还可以进行增位运算...public static void main(String[] args) { 13 14 //classData是我们的字节码,第一是-54,因为byte取值范围是-128~+127

71020
领券