疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java中的对象和对象引用


 

   

  对象:

  在Java中有一句比较流行的话,叫做“万物皆对象”。要理解什么是对象,需要跟类一起结合起来理解。  “按照通俗的说法,每个对象都是某个类的一个实例,这里,‘类’就是‘类型’的同义词。”

  从这一句话就可以理解到对象的本质,简而言之,它就是类的实例,比如所有的人统称为“人类”,这里的“人类”就是一个类(物种的一种类型),而具体到每个人,比如张三这个人,它就是对象,就是“人类”的实例。

  对象引用:

  在Java中一切都被视为对象。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用“。

  Person person = new Person("张三");

  有人会说,这里的person是一个对象,是Person类的一个实例。

  也有人会说,这里的person并不是真正的对象,而是指向所创建的对象的引用。

  Person person;

  person = new Person("张三");

  这两行代码实现的功能和上面的一行代码是完全一样的。大家都知道,在Java中new是用来在堆上创建对象用的,如果person是一个对象的话,那么第二行为何还要通过new来创建对象呢?由此可见,person并不是所创建的对象,是什么?上面的一段话说的很清楚,“操纵的标识符实际是指向一个对象的引用”,也就是说person是一个引用(引用在底层就是指针,但是Java中不涉及指针),是指向一个可以指向Person类的对象的引用。真正创建对象的语句是右边的new Person("张三");

  再看一个例子:

  Person person;

  person = new Person("张三");

  person = new Person("李四");

  这里让person先指向了“张三”这个对象,然后又指向了“李四”这个对象。也就是说,Person person,这句话只是声明了一个Person类的引用,它可以指向任何Person类的实例。

  也就是说,一个引用可以指向多个对象,而一个对象可不可以被多个引用所指呢?答案当然是可以的。

  比如:

  Person person1 = new Person("张三");

  Person person2 = person1;

  person1和person2都指向了“张三”这个对象。

  Java中的引用和C++中的引用是不同的:

  1、Java中的引用只能是对象,对于内置类型没有引用;

  C++可以对任何类型的变量(或称为对象)进行引用。

  2、Java中的引用实际上就是一个指针,能指向该类对象的一个指针,但是操作时又把它当成对象对待;

  C++中的引用虽然也是一个指针,但是把它当成是被引用对象的一个别名,不开辟空间,对引用的操作与对实际变量的操作相同。