關於類的對象,對象引用、引用變量詳解


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM