java 变量创建后在内存中的存储关系+空指针异常机理+图文解释

String s1;
String s2 = null;
String s3 = "abc";
String s4 = "";


一.变量创建后在内存中的存储关系

先看下栈内存中:

在代码中定义的s1、s2、s3、s4叫做变量名(也叫引用),在java内存中是放在栈内存中。在c里面它们又叫做指针(或指针变量)。指针的作用就是存放堆内存中的内存地址

注:这里的变量名、引用和指针是一个概念,只是不同的语言里叫法不一样,后面我们称呼为指针。


我们再看下堆内存:

一般地,申明了一个变量后,对它进行初始化,也就是赋值,如上述代码中的s3,此时才会在堆内存中给它分配一块空间(可以理解为容器)用来存储值,而这块空间(容器)的名字就叫内存地址。如上图右边方框里的圆框,圆框就是一块储存空间(容器),这个空间(容器)里面放的值就是s3变量的值;内存地址 0x111H 就是这个容器的名字


而变量名也就是指针也相当于这么一个容器,变量名或称为指针是这个容器的名字。而这个容器里放的是堆内存中的内存地址,也就是堆内存中容器的名字


这样我们就可以通过变量名也就是指针找到一个具体值了。具体流程是这样:

1.先在栈内存中找到变量名中存放的内存地址;

2.再到堆内存中寻找这个内存地址里存放的值。


也许看到这里你会觉得为什么要知道这种存放方式呢?掌握变量在内存中的存储关系至关重要,在后面的学习中会经常碰到空指针异常就可以从这里得到解释了。


下一节:""与null区别    空指针异常


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值