基本数据类型与包装类型常见问题

基本数据类型

byte1字节-128~127
short2字节-32768~32767
int4字节+-越20亿
long8字节
float4字节
double8字节
boolean——
char——

常见问题 

127+1=-128?

        byte a = 127;
        byte b = (byte)(a + 1);
        System.out.println(b);//-128

 计算机中的数字是用二进制存储的,127的二进制为01111111,127+1=>10000000,而10000000代表着-128

包装类型

Integer、Short.......

自动拆装箱

原理

自动拆装箱是编译器在对.java文件进行编译时,如果你没有进行拆箱与装箱,它会帮你进行拆箱与装箱.拆箱用到了Integer的intValue()方法;装箱用到了Integer的valueOf()方法.

常见问题

public class Demo {
 
	@Test
	public void method() {
		Integer i1 = 100;
		Integer i2 = 100;
		
		Integer i3 = 200;
		Integer i4 = 200;
		
		System.out.println(i1 == i2); //true
		System.out.println(i3 == i4); //false
	}
}

为什么会发生这种事情?

我们看Integer的valueOf()源码

private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
        /*省略部分代码*/
            high = h;
        /*省略部分代码*/
        }
         
        public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }
}

可见,在对比i1,i2时,是直接用的cache中的对象,而对比i3,i4时各新建了对象,所以前者相同,后者不同.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值