首页 > 技术文章 > 关于类的对象,对象引用、引用变量详解

hwtnet 2020-01-16 11:24 原文

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虚拟机中,对象的引用是存在栈中的,而对象是存放在堆中的。

 

 

本文是参了https://www.cnblogs.com/yichunguo/p/11831521.html

推荐阅读