NO.4 我是Java大厦的一块砖:何谓对象与对象引用 ?| Java敲黑板系列

开场白

老铁 :欢迎大家准时收看“Java敲黑板系列”。今天我们的节目首先从一句话开始:“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。”

这段话来自于Java业界的“九阴真经”——《Java编程思想》。从上述“内功心法”我们可以看出:对象与对象引用是两个不同的概念,他们之间应该存在着剪不断理还乱的关系。

可以毫不夸张的说:对他们的理解程度直接决定了我们对Java的“元认知”的高度,这两个概念在很多书籍上、课堂上,大家都是在混用、甚至是误用这两个概念。为此,今天我们请来了Java世界里最基本、也最容易混淆的形影不离的两个概念:对象与对象引用。有请两位!

对象 :大家好,我是对象!很高兴今天能来到“Java敲黑板系列”演播室和大家“谈对象”,希望和大家共度一段美好时光。

对象引用:大家好,我是对象引用,我和对象是一对形影不离的兄弟,但是很多人对我们都“分不清楚”,甚至在很多场合大家都把我们等同在一起。今天来到演播室,可以看见其实我们是完全独立的、不同的两个人。只是我身上有件秘密武器,让我们之间可以“随叫随到”。想知道这个秘密武器是什么,请和我们一起朝下看。

从一个例子讲起

代码片段1:

//包包类
public class Color implements Cloneable{
    private String name; //包包的颜色名称
    public Color(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }

    //测试客户端
    public static void main(String[] args) {
        //1. 常见用法:pkgColor是对象引用;new Color("Red")是对象
        Color pkgColor = new Color("Red");

        //2. 更加详细的说明
        //2.1 声明了一个对象引用hatColor,可用于指向任何Color对象实例
        Color hatColor;
        //2.2 定义了两个对象实例,分别用hatColor对象应用去"指向"他们
        hatColor = new Color("Black");
        hatColor = new Color("White");

        //3. 不同的对象引用可以指向同一个对象
        hatColor = pkgColor;
    }
}

代码片段1中,详细描述了如何声明一个对象引用,如何定义一个对象。
Color pkgColor = new Color(“Red”);

敲黑板:

如上述代码,其中new Color(“Red”)在内存中新创建了一个Color对象实例,但是其返回值是新创建对象的引用;对象如何被使用,都要基于这个new操作的返回值——对象引用pkgColor,对象引用所谓的秘密武器就是当执行上述“=”赋值操作是:对象new Color(“Red”)会把随时报告自己地址的“GPS”交给对象引用pkgColor保存起来,当业务中需要用到对象new Color(“Red”)时,业务代码只需要找到对象引用pkgColor。至此,找到pkgColor后,根据“GPS”提供的信息就能获取到对象new Color(“Red”),后面大家就可以“一起愉快的玩耍”了。啰嗦了一大堆,大家再看看图1是不是很清楚了呢?所以“一图胜千言”是很有道理的。
图1
图2

元芳,你怎么看?

到这里,我想大家基本对对象、对象引用有了一个深刻的认识。这个时候,建议老铁们再回顾一下“Java敲黑板系列”的NO.1 - NO.3,其内部主线就是对象与对象引用在Java不用场景下的运用,欢迎大家把自己的感悟写在留言区进行讨论。

小结

敲黑板,画重点:

  1. Java中的对象与对象引用是两个不同的概念,也是不同的实体,对象一般存放在堆内存空间,对象引用一般存放在栈内存空间。
  2. 可以把对象引用理解为对象的内存区域的首地址。
  3. 对象引用可以指向一个对象,也可以不指向任何对象。Color hatColor = new Color(“Red”); //指向new Color(“Red”)对象
    Color hatColor = null; //不指向任何对象
  4. 一个对象可以被一个对象引用所引用,也可以被多个对象引用同时引用,此时的所有对象引用指向了同一对象。

转载自公众号:代码荣耀
图3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值