1、对象
java最流行的一句话就是“万物皆对象”。要理解对象,直接举个栗子,人,是一个类,单个的人比如“小明”,就是一个对象,也叫做人类的一个实例。
2、对象引用
先看一段我们经常用作创建一个对象的代码:
Student stu = new Student();
这里,有人会说,stu是一个对象,是Student类的一个实例。也有人会说,这里的stu并不是一个真正的实例,而是一个指向所创建对象的引用。到底是怎么回事呢?先别着急下结论,先看下面的代码
Student stu; stu = new Student();
这段代码跟上面的代码效果是一样的吧,这个不用多说。看到这里,应该已经有人明白了上面的问题的结论。
大家知道,new是java用来在堆上创建对象的,如果stu是一个对象的话,那为什么第二句还要用new去创建对象呢?所以,显然stu是一个对象的引用,new Student()才是真正的对象,stu知识一个指向Student类所创建的对象的引用。
3、引用变量
有了上面的栗子,大家应该引用变量是啥了吧。
Student stu;//stu就是引用变量
4、对象与对象引用
下面再来看一段代码
Person person; person = new Person(); //person对象引用指向一个对象 person = new String(); //person对象指向另一个对象
这段代码是什么结果呢?,第三行会报错。这就说明,一个对象的引用,要么不指向任何对象,要么只能指向一个对象,再多了就回报错。
那么再看一段代码
public static void main(String[] args) { String str; //定义一个引用对象,指向零个对象 str=new String("string1"); //一个对象引用str指向一个对象string1 str=new String("string2");//注意:这里对象引用str并不是指向第二个对象string2,而是将之前指向第一个对象string1的引用重新指向了另一个对象string2 System.out.println(str); } 运行结果: string2
这个结果应该能够接受吧。String对象引用str被new了两次,也就是产生了2个对象,这个程序居然不报错。对象引用str并不是指向第二个对象string2,而是将之前指向第一个对象string1的引用重新指向了另一个对象string2,因此从对象引用出发:一个对象引用可以指向零个或一个对象!
最后,在java虚拟机中,对象的引用是存在栈中的,而对象是存放在堆中的。