六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > 變量和對(duì)象的區(qū)別是什么意思

變量和對(duì)象的區(qū)別是什么意思

時(shí)間: 肖陽1034 分享

變量和對(duì)象的區(qū)別是什么意思

  對(duì)象和變量這兩個(gè)概念莫要搞亂,頸是頸,椎是椎,雖然兩者都對(duì)應(yīng)著一塊內(nèi)存,但是從不同的角度去理解內(nèi)存就會(huì)產(chǎn)生不同的意義。下面就讓學(xué)習(xí)啦小編來為大家介紹一下吧,希望大家喜歡。

  變量與對(duì)象

  變量:所謂變量就是一種定義,通過定義編譯器將會(huì)開辟一段空間,并將這段內(nèi)存空間和這個(gè)變量的名字捆綁在一起。從這個(gè)意思去理解,其實(shí)說白了:變量名就是內(nèi)存在代碼中可視化的一個(gè)符號(hào)。也就是說,如int a,a只是內(nèi)存中某段地址在代碼中可視化的一個(gè)符號(hào),a本身作為符號(hào)并不占用空間,占用空間的是a所對(duì)應(yīng)著的那個(gè)變量,通過a這個(gè)符號(hào)我們可以引用到該變量在內(nèi)存中的位置。就好比是人和名字的關(guān)系,人作為一個(gè)真真正正的實(shí)體,是占用地球的物理空間的,是一個(gè)真實(shí)的存在,而這個(gè)人的名字只是代表了這個(gè)人的一個(gè)符號(hào),本身并沒有占用地球的物理空間,只是在他媽把他生下來的時(shí)候,把人這個(gè)實(shí)體和名字捆綁在了一起,因此,我們引用這個(gè)人的名字的時(shí)候,就等于我們找到了這個(gè)人。

  對(duì)象:對(duì)象就是內(nèi)存中一段有類型的區(qū)域。從這句話的描述上來看,對(duì)象至于變量,似乎更關(guān)注的是這對(duì)內(nèi)存的類型,而不是名字。不能說變量就是對(duì)象,或者對(duì)象就是變量,嚴(yán)格來說,對(duì)象就是用來描述變量的。一點(diǎn)佐證是,C++中的臨時(shí)變量的概念,如傳參時(shí)生成的臨時(shí)變量,該變量在內(nèi)存中存在,但是是沒有名字的,因此在代碼中無法可視化,我們就無法通過名字去引用這個(gè)臨時(shí)變量。

  兩者的區(qū)別與聯(lián)系

  從上面的兩個(gè)描述中我們可以看到,兩者都是用來描述一段內(nèi)存的,但是是從不同的角度去描述:

  變量更強(qiáng)調(diào)的是變量名這個(gè)符號(hào)的含義,更強(qiáng)調(diào)名字與內(nèi)存的聯(lián)系,而不必關(guān)注這段內(nèi)存是什么類型,有多少字節(jié)長(zhǎng)度,只關(guān)注這個(gè)變量名a對(duì)應(yīng)著某段內(nèi)存。

  而對(duì)象的描述更強(qiáng)調(diào)的是內(nèi)存的類型而不在乎名字,也就是說,從對(duì)象的角度去看內(nèi)存,就需要清楚這段內(nèi)存的字節(jié)長(zhǎng)度等信息,而不關(guān)注這個(gè)對(duì)象在代

  舉例:

  int a;

  如果我們說a是個(gè)變量,那我們關(guān)注的只是a這個(gè)名字對(duì)應(yīng)著一塊內(nèi)存,當(dāng)我們引用a時(shí),我們能明確的知道我們引用的是a這個(gè)名字所對(duì)應(yīng)的內(nèi)存空間,而不是別的,也不去關(guān)注這個(gè)a的內(nèi)存是個(gè)int啊char啊之類的什么類型。如果我們說a是個(gè)對(duì)象,則我們需要知道這個(gè)對(duì)象具體是什么類型,當(dāng)我們引用并操作a的時(shí)候,就能根據(jù)類型信息做一些符合類型語義的操作,而不是暴力訪問內(nèi)存,任意解析內(nèi)存中的數(shù)據(jù)碼中是否有一個(gè)變量名來引用到這段內(nèi)存。

  對(duì)象與對(duì)象變量

  要想使用對(duì)象,就必須首先構(gòu)造對(duì)象,并指定其初始狀態(tài)。然后,對(duì)對(duì)象施加方法。

  在Java程序設(shè)計(jì)語言中,使用構(gòu)造器(constructor)構(gòu)造新實(shí)例。構(gòu)造器是一種特殊的方法,用來構(gòu)造并初始化對(duì)象。下面看一個(gè)例子。在標(biāo)準(zhǔn)Java類庫中包含一個(gè)Data類。它的對(duì)象將描述一個(gè)時(shí)間點(diǎn),例如"December 31,1999,23:59:59 GMT".

  構(gòu)造器的名字應(yīng)該與類名相同,因此Data類的構(gòu)造器名為Data。要想構(gòu)造一個(gè)Data對(duì)象,需要在構(gòu)造器前面加上new操作符,如下所示:

  new Data()

  這個(gè)表達(dá)式構(gòu)造了一個(gè)新對(duì)象。這個(gè)對(duì)象被初始化為當(dāng)前的日期和時(shí)間。

  如果需要的話,也可以將這個(gè)對(duì)象傳遞給一個(gè)方法:

  System.out.println(new Data());

  相反,也可以將一個(gè)方法應(yīng)用于剛剛構(gòu)造的對(duì)象上。Data類中有一個(gè)toString方法。這個(gè)方法將返回日期的字符串描述。下面的語句可以說明如何將toString方法應(yīng)用于新構(gòu)造的Data對(duì)象上。

  String s=new Data().toString();

  在這兩個(gè)例子中,構(gòu)造的對(duì)象僅使用了一次。通常,希望構(gòu)造的對(duì)象可以被多次使用,因此,需要將對(duì)象存放在一個(gè)變量中;

  Data birthday=new Data();

  在對(duì)象與對(duì)象變量之間存在著一個(gè)重要的區(qū)別。例如,語句

  Data deadline;//deadline doesn't refer to any object

  定義了一個(gè)對(duì)象變量deadline,它可以引用Data類型的對(duì)象。但是,一定要認(rèn)識(shí)到:變量deadline不是一個(gè)對(duì)象,實(shí)際上也沒有引用對(duì)象。此時(shí),不能將任何Data方法應(yīng)用于這個(gè)變量上。語句

  s=deadline.toString();

  將產(chǎn)生編譯錯(cuò)誤。。

  必須首先初始化變量deadlin.這里有兩個(gè)選擇。當(dāng)然可以用新構(gòu)造的對(duì)象初始化這個(gè)變量:

  deadline=new Data();

  或者讓這個(gè)變量引用一個(gè)已存在的對(duì)象:

  deadline=birthday;

  選擇,這個(gè)兩個(gè)變量引用同一個(gè)對(duì)象

  一定要認(rèn)識(shí)到:一個(gè)對(duì)象變量并沒有實(shí)際包含一個(gè)對(duì)象,而僅僅引用一個(gè)對(duì)象。

  在Java中,任何對(duì)象變量的值都是對(duì)存儲(chǔ)在另外一處的一個(gè)對(duì)象的引用。new操作符的返回值夜是一個(gè)引用。下列語句:

  Data deadline=new Data();

  有兩個(gè)部分。表達(dá)式new Data()構(gòu)造了一個(gè)Data類型的對(duì)象,并且它的值是對(duì)新創(chuàng)建對(duì)象的引用。這個(gè)引用被存儲(chǔ)在變量deadli中。

  可以顯式地將對(duì)象變量設(shè)置為空(null),表明和這個(gè)對(duì)象變量目前并沒有引用任何對(duì)象。

  deadline=null;

  ...

  if(deadline!=null)

  System.out.println(deadline);

  如果將一個(gè)方法應(yīng)用于一個(gè)值為null的對(duì)象上,就會(huì)產(chǎn)生運(yùn)行錯(cuò)誤。

  birthday=null;

  String s=birthday.toString();//runtime error!

  變量不會(huì)自動(dòng)地初始化為null,而必須對(duì)他們進(jìn)行初始化,調(diào)用new或?qū)⑺鼈冊(cè)O(shè)置為null。
猜你喜歡

1.值類型和引用類型的區(qū)別

2.Java中變量和常量之間的區(qū)別

3.什么是對(duì)象數(shù)組

4.類方法和實(shí)例方法的區(qū)別

5.什么是面向?qū)ο?/a>

2908547