在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然。今天我们就来一起了解一下对象和对象引用之间的区别和联系。
1.何谓对象?
在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一。要理解什么是对象,需要跟类一起结合起来理解。下面这段话引自《Java编程思想》中的一段原话:
“按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,‘类’就是‘类型’的同义词。”
从这一句话就可以理解到对象的本质,简而言之,它就是类的实例,比如所有的人统称为“人类”,这里的“人类”就是一个类(物种的一种类型),而具体到每个人,比如张三这个人,它就是对象,就是“人类”的实例。
2.何谓对象引用?
我们先看一段话:
“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。”
这段话来自于《Java编程思想》,很显然,从这段话可以看出对象和对象引用不是一回事,是两个完全不同的概念。举个例子,我们通常会用下面这一行代码来创建一个对象:
Person person = new Person("张三");
有人会说,这里的person是一个对象,是Person类的一个实例。
也有人会说,这里的person并不是真正的对象,而是指向所创建的对象的引用。
到底哪种说法是对的?我们先不急着纠结哪种说法是对的,再看两行代码:
Person person;
person = new Person("张三");
这两行代码实现的功能和上面的一行代码是完全一样的。大家都知道,在Java中new是用来在堆上创建对象用的,如果person是一个对象的话,那么第二行为何还要通过new来创建对象呢?由此可见,person并不是所创建的对象,是什么?上面的一段话说的很清楚,“操纵的标识符实际是指向一个对象的引用”,也就是说person是一个引用,是指向一个可以指向Person类的对象的引用。真正创建对象的语句是右边的new Person("张三");
再看一个例子:
Person person;
person = new Person("张三");
person = new Person("李四");
这里让person先指向了“张三”这个对象,然后又指向了“李四”这个对象。也就是说,Person person,这句话只是声明了一个Person类的引用,它可以指向任何Person类的实例。这个道理就和下面这段代码一样:
int a;
a=2;
a=3;
这里先声明了一个int类型的变量a,先对a赋值为2,后面又赋值为3.也就是说int类型的变量a,可以让它的值为2,也可以为3,只要是合法的int类型的数值即可。
也就是说,一个引用可以指向多个对象,而一个对象可不可以被多个引用所指呢?答案当然是可以的。
比如:
Person person1 = new Person("张三");
Person person2 = person1;
person1和person2都指向了“张三”这个对象。
关于对象和对象引用的区别和联系暂时就讲这么多了,感兴趣的朋友可以查阅相关文档和资料。
相关推荐
在IT领域,尤其是在Java开发和Android应用开发中,文件的压缩与解压缩是常见的需求之一。这不仅涉及到数据存储的优化,还关系到资源的有效管理和网络传输效率的提升。本文将深入探讨Java环境下如何实现文件的解压缩...
在Java编程环境中,处理RAR压缩包并对其进行解压是一个常见的任务,特别是在自动化脚本或数据迁移等场景下。本文将详细介绍如何使用Java实现这个功能,特别是处理带密码保护的RAR文件,同时支持中文文件名,并能在...
在这个“java-验证码识别-验证码破解”的主题中,我们将深入探讨如何使用Java进行验证码识别,特别是通过Tess4J库进行OCR(光学字符识别)。 验证码的主要目的是防止自动化的恶意行为,如机器人攻击或垃圾邮件发送...
使用过protobuf的同学肯定对pb的DebugString相关方法再熟悉不过了,其作用就是打印输出pb对象。有些时候我们可能会有根据这个输出还原原始pb对象的需求。仔细观察发现输出并不是标准json格式,也就是说基于json→pb...
### 使用Java实现文件的压缩与解压缩(支持中文) #### 概述 本文将详细介绍如何使用Java语言实现文件的压缩与解压缩功能,并且确保在处理包含中文字符的文件路径时能够正常工作。通过本教程,您将学习到几种不同...
网上很多描述java解压中文乱码的问题,...public static void main(String args[]) { new ZipUtil().unZip("E:\\aaaa\\中文.zip","E:\\aaaa\\中文","GBK"); } 实例: 将E:\\aaaa\\中文.zip解压到E:\\aaaa\\中文目录下
在本篇中,我们将深入探讨如何使用Java API来实现ZIP文件的解压缩,以及可能需要用到的第三方库。 首先,Java标准库(Java Standard Library)自身提供了对ZIP文件的支持。在`java.util.zip`包中,有两个关键类用于...
在Java编程语言中,文件的压缩与解压缩是常见的任务,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本资源"JAVA文件压缩与解压缩实践(源代码+论文)"提供了一个完整的实践教程,包括源代码和相关论文,帮助...
Java解压缩文件是Java开发中常见的一项操作,特别是在处理数据传输、软件安装包或资源包时。本篇文章将深入探讨如何使用Java进行文件的解压缩,以及相关工具和源码的使用。 首先,Java标准库提供了`java.util.zip`...
在Java编程环境中,处理文件的压缩与解压缩是一项常见的任务,尤其在数据传输、存档或备份场景下。本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,...
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
在Java编程环境中,处理ZIP格式的压缩包是一项常见的任务,无论是为了读取文件内容、打包文件还是进行数据传输。本文将深入探讨如何使用Java来解压ZIP格式的压缩包,并提供相关的源码参考。 首先,我们需要了解Java...
在Java编程语言中,解压缩ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包和部署等场景下。本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种...
至于标签“文件解压缩”,它涵盖了我们在讨论中的主题——如何在Java中处理ZIP文件的解压缩。Java提供了强大且易于使用的API,使得开发者能够轻松地集成文件解压缩功能到他们的应用程序中。 总的来说,Java的`java....
Java解压缩技术是Java开发中一个非常实用的技能,特别是在处理数据传输、文件打包和部署等方面。本篇文章将深入探讨如何在Java中解压jar包,以及与之相关的`java unrar 0.3`库的使用。 首先,我们要了解什么是jar包...
### Java文件解压缩实现 #### 知识点概述 本文将详细介绍如何使用Java语言实现文件解压缩的功能。解压缩操作是计算机系统中的常见需求之一,尤其是在处理大量数据或需要从压缩包中提取文件的情况下。本示例代码...
本篇文章将详细介绍如何在Java中实现文件的打包和解压缩,以及如何根据个人需求对其进行修改。 首先,让我们了解打包过程。在Java中,JAR文件是用于存储类文件、资源文件和其他元数据的容器,它类似于其他编程语言...
在Java编程环境中,解压缩ZIP或RAR格式的文件是一项常见的任务,这主要涉及到I/O流、文件操作以及压缩和解压缩库的使用。本篇将深入讲解如何在Java中实现这个功能,同时会介绍一些相关的工具和源码。 首先,对于ZIP...
在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在项目开发过程中,为了节省存储空间或方便传输,我们常需要对文件进行压缩。本项目“Java 项目-java的JAVA文件压缩与解压缩实践.zip”提供了一个实战示例,...