`
tomcat_oracle
  • 浏览: 311648 次
社区版块
存档分类
最新评论

再解Java中的String

    博客分类:
  • Java
阅读更多
 在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都指向了“张三”这个对象。
  关于对象和对象引用的区别和联系暂时就讲这么多了,感兴趣的朋友可以查阅相关文档和资料。
12
2
分享到:
评论
9 楼 verre 2014-05-10  
确定标题没写错?????
8 楼 永志_爱戴 2014-05-10  
标题党吧,与String没半点毛的关系
7 楼 alvin198761 2014-05-09  
万物皆对象是不对啊,只是年龄太大,或样貌太恐怖者不行
6 楼 waitgod 2014-05-09  
法。尽管将一切都“看作”对象,但操纵的
yixiandave 写道
楼主确定标题没写错?

5 楼 lianglaiyang 2014-05-08  
虽然标题写错了,但内容写得还是很透彻
4 楼 hxr521521 2014-05-08  
挂羊头卖狗肉啊
3 楼 searchnomore 2014-05-08  
楼主确定标题没写错?
2 楼 ansjsun 2014-05-08  
yixiandave 写道
楼主确定标题没写错?

标题党
1 楼 yixiandave 2014-05-08  
楼主确定标题没写错?

相关推荐

    protobuf根据DebugString输出字串反解pb对象的实例(C++)

    使用过protobuf的同学肯定对pb的DebugString相关方法再熟悉不过了,其作用就是打印输出pb对象。有些时候我们可能会有根据这个输出还原原始pb对象的需求。仔细观察发现输出并不是标准json格式,也就是说基于json→pb...

    java zip解压中文乱码问题

    网上很多描述java解压中文乱码的问题,...public static void main(String args[]) { new ZipUtil().unZip("E:\\aaaa\\中文.zip","E:\\aaaa\\中文","GBK"); } 实例: 将E:\\aaaa\\中文.zip解压到E:\\aaaa\\中文目录下

    常用的java工具类:Date和String类型互转,获取想要格式的String类型的日期时间、java导出数据到Excel、http文件下载、HMAC-MD5加密、3DES加密、MD5加密、读写txt文件、zip解压缩文件、文件夹

    一些常用的java工具类:Date和String类型互转,获取想要格式的String类型的日期时间、java导出数据到Excel、http文件下载、HMAC-MD5加密、3DES加密、MD5加密、读写txt文件、zip解压缩文件、文件夹等

    java算法,实现压缩及解压缩

    Java实现压缩与解压缩ZIP  import java.io.BufferedInputStream;  import java.io.BufferedOutputStream;  import java.io.File;  import java.io.FileInputStream;  import java.io.FileOutputStream;...

    JAVA文件压缩与解压缩实践.doc

    JAVA文件压缩与解压缩实践报告 主函数 gzip压缩模块代码 压缩模块要完成的就是将文件读入以后进行压缩,再将压缩后的数据写入一个新的文件,其部分代码如下: public class gzip { public static void main(String...

    java基础入门教程

    Java 语 言 能 在 执 行 码 (二 进 制 码 )上 兼 容 ,这 样 以 前 所开 发 的软 件 就 能 运行 在 不 同 的 机 器 上 ,只 要 所 用 的 机 器 能 提供 Java 语 言 解 释 器 即可 。 Java 语 言 将 对 未 来 软 件 ...

    JAVA上百实例源码以及开源项目源代码

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    JAVA上百实例源码以及开源项目

    通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...

    文件操作类(java)

    java实现对文件的基本操作,如创建,删除,读取,写入,解压缩,复制,移动等操作。{@link #createFile(String)} * * {@link #readFile(String, String)} * * {@link #moveFile(String, String)} * {@link #...

    Spire.Barcode for Java - Java 一维和二维条码快速生成和识别组件

    下载以后解压缩,然后从lib文件夹下导入Spire.Barcode.jar包到你的Java应用程序中即可。 支持的条码类型 Spire.Barcode for JAVA支持的条码类型多达38种,包括常见的QR Code、Code 25、 CodeBar、Code 39、Code 93...

    java swing局域网的聊天源码

    解压缩之后,将chat.sql导入你的mysql数据库中; 将chat文件夹工程导入eclipse编辑器中; 更改 DButil.java 里面的mysql服务器Ip 改成你的IP地址; 更改Constans.java 里面public final static String CON_...

    Java复习题及答案

    1、Java允许创建不规则数组,即Java多维数组中各行的列数可以不同。 ( ) 2、接口和类一样也可以有继承关系,而且都只能支持单继承。 ( ) 3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类...

    C# to Java 代码转换工具

    一个很强大的工具, 能将c#代码片段、文件甚至工程直接转换成java代码,并能彻底解决外部引用的DLL问题,最强的是支持c#工程的直接转换,生成的Java代码质量也很不错。软件已破解,去除了未注册版最多只能转换1000行的...

    Java程序设计

    编写Java应用程序,求解一元二次方程,要求求出复数解。  2011-10-02 21:21:49| 分类: 程序设计|字号 订阅 对话框输出:import javax.swing.JOptionPane;  public class quadratic_Equation  {  public ...

    java代码获取myeclipse注册码.txt

    String verTime = new StringBuilder("-").append(new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString(); String type = "YE3MP-"; String need = new StringBuilder...

    java实验报告.doc

    二、实验内容或题目 1、编写一个Java Application字符界面程序,实现数论中的某个基本算法:最大公约数和最小公倍数的求 解。 2、编写一个Java Applet程序,利用图形界面输入一个数据,判断是否是回文数,并将结果...

    Java优化编程(第2版)

    4.3.1 java语言中输入/输出流 4.3.2 通过系统缓冲流类提高i/o操作效率 4.3.3 通过自定制缓冲区提高i/o操作效率 4.3.4 通过压缩流提高i/o操作效率 4.3.5 通过非阻塞i/o优化应用性能 4.4 其他 104 4.4.1 数据格式化与...

    Java Bug模式详解

    Java.Bug模式详解 第1章 混乱环境下的灵活方法 1.1 软件设计、实现和维护的趋势 1.1.1 对于稳定、安全 系统的需求增加 1.1.2 传统软件工程技 术的局限性 1.1.3 开放源代码的软 件项目的可利用性 1.1.4 对于...

    lzstring4j:基于LZ的Java压缩算法

    lzstring4j-Java的LZString lzstring4j是Java的的易于使用的实现。 这个想法是受启发的。 特征: 基于JavaScript LZString库(版本1.3.3) UTF-16压缩 Base64压缩 通过这篇通过UTF-16压缩方法(Java Server-> ...

Global site tag (gtag.js) - Google Analytics