Java基础总结(二)基本数据类型的引用

本文通过实例详细解析了Java中基本数据类型与包装类在内存中的分配方式及引用比较的区别,探讨了==运算符在不同情况下的行为。

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

在上一篇文章中我们谈到了引用,这篇文章我们就来谈谈引用在基本数据类型与其对应的包装类应用与分析
先看看下面这段代码:

 @Test
    public void test() {
        int a = 10;
        int b = 10;

        Integer c = 10;
        Integer d = 10;

        Integer e = new Integer(10);
        Integer f = new Integer(10);

        System.out.println("a == b: " + (a == b));  //①true
        System.out.println("c == d: " + (c == d));  //②true
        System.out.println("e == f: " + (e == f));  //③false
        System.out.println("a == c: " + (a == c));  //④true
        System.out.println("c == e: " + (c == e));  //⑤false
        System.out.println("a == e: " + (a == e));  //⑥true

        Integer m = 500;
        Integer n = 500;
        System.out.println("m == n: " + (m == n)); //⑦false
}

首先我们需要明白
①在方法区中,存储的相同常量只能为一个
②只要是通过new,来创建引用的,都需要在堆内存创建新的空间
③==永远是用来比较内存中的地址的,基本类型感觉上是在比较内容,实际上还是在比较地址

分析其引用过程:
①a,b为基本数据类型 ,堆中是不开辟内存的
当执行第一句代码时。先查找方法区中有没有10,没有,则开辟一个空间存放10,然后在栈中存入一个变量 a,让a指向10;
执行第二句的时候,查找发现10已经存在了,所以就不开辟新空间了。直接在栈中保存一个新变量b,让b指向2;

②c,d为int的包装类Interger
integer与integer比较的是引用的地址,并没有在堆中开辟新空间(不用new的情况下)

③e,f为Interger,integer与integer比较的是引用的地址,均在堆中开辟新的空间,各空间不一样

④a,c,一个为int,一个为Interger。首先Interger c先拆箱成int,再与a比较,此时c直接指向常量10,两者的值(指向的内存地址)一样。
这个分析同⑥

⑤c没有开辟新的空间,e开辟了新的空间,两者指向不一样

⑦两者均为Interger,但是为false。原因如图:
这里写图片描述

总结,分析如图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值