java对象和对象引用变量

11 篇文章 0 订阅

Java对象及其引用

先搞清楚什么是堆,什么是栈。 
Java开辟了两类存储区域,对比二者的特点

堆栈的存储特点决定了其中存储的数据类型。

注意,栈内存储的除了基本类型的变量(int 这种类型的变量)还会存储对象的引用变量

java中,引用变量实际上是一个指针,它指向的是堆内存中对象实例。

引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。

MyClass mc;    // 在栈中开辟了空间给引用变量mc,这时mc的值为null 
mc=new MyClass(); 

// 1. new MyClass()在堆中开辟了空间给MyClass类的对象
// 2. 赋值运算符 "="  把对象的地址赋值给引用变量mc
// 3. 即 new MyClass(); 返回的是对象的地址
// 4. mc的值是 MyClass类的对象地址 即mc指向了对象 所以我们能用mc访问堆中数据

 当一个对象被构造了 却不使用 或 不被指向 那么会被垃圾回收机制回收了。

所以如下操作毫无意义

new MyClass();
new MyClass();
new MyClass();  // 这个3个对象没有引用变量指向 会被垃圾回收
  • 匿名对象 <没有引用指向对象>
String s = new String("helloworld");
System.out.println(s); 

System.out.println(new String("helloworld"));

System.out.println("helloworld");

在System.out.println("helloworld"); 中 String对象  "helloworld" 没有被指向 但被println函数使用了

在println函数用这个匿名对象时, 这个对象还在 ,一旦用完了 ,又因匿名对象没有引用指向,所以无法访问,匿名对象就会被回收。

  • new的作用
MyClass[] mcs;

mcs = new MyClass[4];  //new 在栈中开辟了引用变量的空间 并返回了栈中地址 

for(int i = 0; i < 4; i++)
{
    mcs[i] = new Myclass();  //new 在堆中开辟了对象数据的空间 并返回对象的堆中地址 即引用指向了对象
}

mcs[i] 中的值 是对象的地址,即栈中保存的是对象地址,堆中保存的是对象数据。通过栈中地址就能找到堆中数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值