java 对象存储_Java学习笔记一:对象与存储

1.用引用来操作对象

Java是面向对象的编程语言,一切都能看作是对象,通过引用来完成对对象的操作。

//String 是对象,而s对指向这个String对象的引用

String s;

注意:我们是通过对象的引用来操纵对象数据的,如果对象没有关联数据(如没有被初始化),则会出现空引用,报空指针异常:java.lang.NullPointerException

2.数据存储

(1)寄存器:位于CPU内部,是处理最快的区域,但是存储空间有限。Java不能通过程序直接控制。

(2)堆栈:位于RAM(随机访问存储器)中,通过堆栈指针从处理器获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放内存。仅次于寄存器的分配方式。

对于堆栈指针的移动,就要涉及到对象生命周期(简单理解是:堆栈指针移动,断开堆栈中引用的与对象的连接,此时对象就会被垃圾回收站回收)。

通常引用时存储在堆栈中,但是Java对象不存储在这里,而是存储在堆中。

Java的8中基本类型分别是:boolen,char,byte,short,int,long,float,double,这8种类型由于追求速度的原因,被存储在堆栈中。

例如:当定义 int a = 3 时,编译器会根据int类型在栈中分配固定的区域,来存储3这个字面值,同时创建a的引用,而a是指向存储3这个区域的引用(引用当然存储在栈中)

此时,如果在定义 int b = 3 时,首先会在栈中查找有没有这个字面量,找到后,把b的引用指向3,此时a,b都指向同一个区域。这就是栈一个重要特性:数据共享。

如果定义int c = 4,编译器内部无法找到4这个字面量,会重新给int分配空间存储,同时创建c的引用。

说明:这里的引用其实是栈中以4字节存储的地址,它存储的是其他区域的地址(类似于C++指针)。

f700e92af5118affbe30bca845689b96.png

(3)堆:位于RAM中,一种通用的内存池,存储所有的Java对象。堆与堆栈的区别:编译器不需要知道存储的数据在堆里存活的时间。使用new关键字,就能在堆中自动分配存储空间。

String类型也是常量存储。在Java中,创建一个对象通常包括两个步骤:1.对象声明(即创建对象引用);2.实例化(即为对象在堆中分配存储空间)。

创建过程与上述int类似,差别在于引用和对象不再同一块区域。

6917c6c5c481df0a2bdac77c0cea4555.png

String s1; //声明

s1 = new String("abc"); //实例化

String s3;//声明

s3 = new String("abc"); //实例化//比较结果为true,这个是内容的比较

System.out.println(s1.equals(s3));//比较结果为false,这个是引用的比较.因为引用位置不一样,结果肯定不一样

System.out.println(s1== s3);

(4)常量存储:常量值通常存储在程序代码内部,用于存放字符串常量和基本类型常量,一般使用 public static final 定义

(5)非RAM存储:通常值得是硬盘。两个基本的例子是:流对象和持久化对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值