【Java】简单区分对象引用和对象

以下纯属个人的理解,如果有不全或者错误的地方,欢迎大家批评指正。

初学 Java 的时候,博主很容易将两者混淆在一起,这里就做个简单的区分。

为了方便说明,博主先创建一个 People 类(类是具有相同属性和行为的一类实体,对象是类的实例化)

public class People {
      
      private String name;
      private int age;
      public People(String name,int age) {
            super();
            this.name = name;
            this.age = age;
      }
      public String getName() {
            return name;
      }
      public void setName(String name) {
            this.name = name;
      }
      public int getAge() {
            return age;
      }
      public void setAge(int age) {
            this.age = age;
      }
      
}

具体的类有了,下面我们来实例化 People 类,代码如下:

public class ObjTest {
      public static void main(String[] args) {
            People zhh = new People("赵海豪", 23);
      }
}

看似是一行简单的代码,我们把这一行简单的代码做拆分,大概是以下这个样子:

People zhh;
zhh = new People("赵海豪", 23);
  • 先来说明下 People zhh 这一小段代码的作用:Java虚拟机为其分配了一块栈空间。这里主要是声明了一个引用变量 zhh (也就是我们的对象引用),对应的类型为 People 。打个比方,我起了个绰号叫 zhh ,我们只知道有 zhh 这个绰号存在,但是我们并不知道它具体指的是哪个人。这个绰号就可以理解为是对象引用。
  • 再来说下 new People("赵海豪", 23) 这段代码:这里的话Java虚拟机为其分配的不再是栈空间了,而是分配的堆空间。在这里主要是实例化了一个具体的对象。换句话说,就是现在有一个这样的人,他的名字叫 赵海豪,今年 23 岁。这个具体的人就可以理解为是对象。
  • 最后再来说说这个"=":在Java虚拟机当中,并不是将我们的引用对象直接提供给变量(对象引用)的,而是将引用对象存在堆中的地址提供给变量,然后变量再通过这个对象的地址去堆内查找我们的引用对象。其实也就是将我们的对象引用指向我们的对象。换句话也就是说,我给这个名字叫 赵海豪,今年 23 岁的小伙子起了 zhh 这样的一个绰号,现在 zhh 就是指他这个人。

忽略中间其余的过程,我简单给出上述代码在堆栈中的引用关系图:

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值