java空指针异常

空指针异常是针对Java的引用数据类型。
不过介于包装类的存在,可以理解为是Java的基本错误。
那么这个错误是什么呢?
我们知道,我们对每个高级语言着迷的往往是它的内存模型,也就是他是怎么管理和分配内存的。如果你理解了这点,那么在看Java就会明白,Java中一切皆对象。基本数据类型的存在我觉得1是方便程序员从C迁移到Java,然后是写起来也很方便。
Java是个垃圾回收的语言,也就是它不相信程序员可以手动管理内存的能力,这方便了程序员,使得Java程序员写出的代码千篇一律,体现不出高低。(可能能体现的就是设计模式了),但坏处是程序卡顿。这很好理解,我们用的腾讯会议这个软件是C系列语言写的,因此它使得程序员自己管理内存。因此程序员完全可以在视频会议不是那么重要的节点去释放内存,比如我正在看视频,那么聊天框的那部分代码的内存我就现释放掉。而Java因为完全依赖垃圾回收器释放内存,因此可能用Java开发的视频会议会在关键时刻释放内存,造成卡顿一段时间。
Java的内存模型也就简单明了了。有1个栈来保存你调用的函数的名字,对象的名字,临时变量和他的值,而堆就是很大块的内存,他是new出来的。例如String []args = new String[3];,这个例子中,args在栈,3个String对象在堆。因此空指针异常就是String[]args = null;然后你调用了args,可能是打印了他,然后去栈里面找,找到了,但是值是null.你可以尝试着不给args赋值,一定会编译不通过。那么就是强制性的必须给在栈里的内容赋值。要么是null,要么是堆的地址。你可能还会好奇打印了一下堆的地址,但发现其实是一串hash,怎么回事?原因是Java的栈里面存的原来是hash表,这样可以以O(1)的速度找到对象的地质。另外说一下,Java里面的hash仅仅是32位,远远算不上hash,即有可能发生碰撞。
再说会基本类型。基本类型也是必须初始化,也就是int a;打印a,不可以,你要给他值。为什么呢?其实我认为是包装类的存在,使得所有基本数据类型都有对应的引用类型,因此就把基本数据类型的规则参考引用类型就ok了。可能还会有人说常量池的概念,认为并不是所有基本类型的包装类都会默认变为引用类型这样的规则,其实是存在1个缓冲的范围,在那段范围,数据就是以补码存在的,也就是栈里面就是存着一个数值。
反正栈里面遵循着你必须有值的原则,只声明不赋值是不可以的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值