Java中局部变量和成员变量的区别

此文帮助你理清局部变量和成员变量存储位置的一些细节

先来看一段代码:

public class StudyVariable {
    // 成员变量 -- 基本数据类型
    private int a;
    // 成员变量 -- 引用数据类型
    private BigDecimal decimal;

    public StudyVariable() {
    }

    public StudyVariable(int a, BigDecimal decimal) {
        this.a = a;
        this.decimal = decimal;
    }

    public void doYouKnow() throws InterruptedException {
        // 局部变量 -- 基本数据库类型
        int k = 1;
        // 局部变量 -- 引用数据类型
        StudyVariable objectVa = new StudyVariable();
        System.out.println("do you know...");
        TimeUnit.SECONDS.sleep(1000);
    }

    public static void main(String[] args) throws InterruptedException {
        StudyVariable o = new StudyVariable(10, BigDecimal.ZERO);
        o.doYouKnow();
    }
}

相信大家对于上图的数据类型的标注都能够理清楚,不同的变量也会有不同类型。

归纳

这里先给出这几个类型的总结,我们下面再来实际分析。

局部变量成员变量
基本数据类型变量在虚拟机栈上变量都在堆上
引用数据类型变量值在虚拟机栈上,变量值指向的对象在堆上变量值以及变量值指向的对象都在堆上

具体分析

我这里直接运行了上面的代码,dump出JVM的内存快照。
heap dump

  1. 可以看到这里只有这两个StudyVariable对象,但是并没有这两个对象的引用名称
  2. StudyVariable对象内部的field中属性【a】和【deciaml】是有引用名称的,同时它们也存在变量的值,这里有引用名称其实也可以理解。
  3. 搜索局部变量【k】是搜索不到的。
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倜傥村的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值