JAVA封装数据类型和基本数据类型的比较

本文探讨了Java中封装数据类型在不同情况下的比较方法,包括使用==运算符和equals()方法的区别,以及涉及new操作符时的特殊情况。文章还详细解释了在特定数值范围内Integer对象的缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:使用==比较

1:不同封装数据类型的比较会出现编译出错

    public static void main(String[] args) {
    Integer integer=5;
    Long aa=5l;
    System.out.println(integer==aa);

2:相同的封装数据类型==比较
取值在范围内且值相等返回true,不在范围false。
如:

    Integer integer2=14;
    Integer integer=14;
    System.out.println(integer==integer2);//true

    Integer integer2=184;
    Integer integer=184;
    System.out.println(integer==integer2);//false

3:基本数据类型和封装数据类型

    Integer integer2=14;//Integer进行拆箱操作
    int integer=14;
    System.out.println(integer==integer2);//true

值相等就返回true。

二:使用equals()方法比较
1:equals()参数是封装数据类型
类型相同就进行值比较,值若相等返回true。类型不同返回false。

2:equals()参数是基本数据类型
如果参数为基本数据类型,先装箱,后进行类型的比较,类型相同再进行值比较,
不同返回false。
三:有new操作符的时候
Integer进行赋值的时候注意:
一个是-128<= x<=127的整数,将会直接缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象。二:当大于这个范围的时候,直接new Integer来创建Integer对象。

    Integer i=new Integer(128);
    Integer i2=128;
    System.out.println(i==i2);//false

i和i2都是Integer的对象。存储在堆中,分配的地址不同,在使用==进行判读的时候,由于双方都是对象,所以比较对象的地址是不是相同,这里的地址是不同的,因为new的时候会在堆中重新分配存储空间。

    Integer i3=new Integer(126);
    Integer i4=126;
    System.out.println(i3==i4);//false

都在范围内,i4从IntegerCache缓存中取得对象,i3自己new出,==比较地址,地址是不同的

    Integer i5 = 128;
    Integer i6 = 128;

自动装箱产生的Integer的对象,但是其大小超过了范围:-128<=A <=127,那么,这里会直接自己创建该对象即:new Integer(128);

    Integer i7 = 127;
    Integer i8 = 127;

i7、i8是自动装箱产生的对象,其值都是127,那么这里很特殊的是127正好在-128<=i7<=127这个范围内的,那么会去IntegerCache中取,既然都是去IntegerCache中去取,那么自然该对象应该是一个对象,那么再堆中的地址应该是一样的,所以在判读两个对象是不是== 的时候,会输出true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值