真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中引用類型和原始類型有哪些區(qū)別

今天小編給大家分享一下Java中引用類型和原始類型有哪些區(qū)別的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為臺(tái)安企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站建設(shè)臺(tái)安網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

下表列出了原始類型以及它們的對(duì)象封裝類。

原始類型封裝類
boolean Boolean
 charCharacter
byte Byte
short Short
intInteger

long  

Long
floatFloat
double Double

引用類型和原始類型的行為完全不同,并且它們具有不同的語義。例如,假定一個(gè)方法中有兩個(gè)局部變量,一個(gè)變量為 int 原始類型,另一個(gè)變量是對(duì)一個(gè) Integer 對(duì)象的對(duì)象引用:

int i = 5; // 原始類型  Integer j = new Integer(10); // 對(duì)象引用

這兩個(gè)變量都存儲(chǔ)在局部變量表中,并且都是在 Java 操作數(shù)堆棧中操作的,但對(duì)它們的表示卻完全不同。(本文中以下部分將用通用術(shù)語堆棧代替操作數(shù)堆?;蚓植孔兞勘?。)原始類型 int 和對(duì)象引用各占堆棧的 32 位。(要表示一個(gè) int 或一個(gè)對(duì)象引用,Java 虛擬機(jī)實(shí)現(xiàn)至少需要使用 32 位存儲(chǔ)。)Integer 對(duì)象的堆棧項(xiàng)并不是對(duì)象本身,而是一個(gè)對(duì)象引用。

Java 中的所有對(duì)象都要通過對(duì)象引用訪問。對(duì)象引用是指向?qū)ο蟠鎯?chǔ)所在堆中的某個(gè)區(qū)域的指針。當(dāng)聲明一個(gè)原始類型時(shí),就為類型本身聲明了存儲(chǔ)。

引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對(duì)象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。

許多程序的代碼將同時(shí)包含原始類型以及它們的對(duì)象封裝。當(dāng)檢查它們是否相等時(shí),同時(shí)使用這兩種類型并了解它們?nèi)绾握_相互作用和共存將成為問題。程序員必須了解這兩種類型是如何工作和相互作用的,以避免代碼出錯(cuò)。

例如,不能對(duì)原始類型調(diào)用方法,但可以對(duì)對(duì)象調(diào)用方法:

int j = 5;  j.hashCode(); // 錯(cuò)誤  //。..  Integer i = new Integer(5);  i.hashCode(); // 正確

使用原始類型無須調(diào)用 new,也無須創(chuàng)建對(duì)象。這節(jié)省了時(shí)間和空間?;旌鲜褂迷碱愋秃蛯?duì)象也可能導(dǎo)致與賦值有關(guān)的意外結(jié)果??雌饋頉]有錯(cuò)誤的代碼可能無法完成您希望做的工作。例如:

import java.awt.Point;  class Assign  {  public static void main(String args[])  {  int a = 1;  int b = 2;  Point x = new Point(0,0);  Point y = new Point(1,1); //1  System.out.println(“a is ” + a);  System.out.println(“b is ” + b);  System.out.println(“x is ” + x);  System.out.println(“y is ” + y);  System.out.println(“Performing assignment and ” +  “setLocation.。.”);  a = b;  a++;  x = y; //2  x.setLocation(5,5); //3  System.out.println(“a is ”+a);  System.out.println(“b is ”+b);  System.out.println(“x is ”+x);  System.out.println(“y is ”+y);  }  }

這段代碼生成以下輸出:

a is 1  b is 2  x is java.awt.Point[x=0,y=0]  y is java.awt.Point[x=1,y=1]  Performing assignment and setLocation.。.  a is 3  b is 2  x is java.awt.Point[x=5,y=5]  y is java.awt.Point[x=5,y=5]

修改整數(shù) a 和 b 的結(jié)果沒什么意外的地方。b 的值被賦予整型變量 a,結(jié)果 a 的值增加了 1。這一輸出反映了我們希望發(fā)生的情況。但是,令人感到意外的,是在賦值并調(diào)用 setLocation之后 x 和 y 對(duì)象的輸出。我們?cè)谕瓿?x = y 賦值之后特意對(duì) x 調(diào)用了 setLocation,x 和 y 的值怎么會(huì)相同呢?我們畢竟將 y 賦予 x,然后更改了 x,這與我們對(duì)整數(shù) a 和 b 進(jìn)行的操作沒什么不同?!?/p>

這種混淆是由原始類型和對(duì)象的使用造成的。賦值對(duì)這兩種類型所起的作用沒什么不同。但它可能看起來所有不同。賦值使等號(hào) (=) 左邊的值等于右邊的值。這一點(diǎn)對(duì)于原始類型(如前面的 int a 和 b)是顯而易見的。對(duì)于非原始類型(如 Point 對(duì)象),賦值修改的是對(duì)象引用,而不是對(duì)象本身。因此,在語句

x = y;

之后,x 等于 y。換句話說,因?yàn)?x 和 y 是對(duì)象引用,它們現(xiàn)在引用同一個(gè)對(duì)象。因此,對(duì) x 所作的任何更改也會(huì)更改 y。下面是 //1 處的代碼執(zhí)行以后的情況:

執(zhí)行 //2 處的賦值以后情況如下:

當(dāng)在 //3 處調(diào)用 setLocation 時(shí),這一方法是對(duì) x 引用的對(duì)象執(zhí)行的。因?yàn)?x 引用的 Point 對(duì)象也正是 y 所引用的對(duì)象,所以我們現(xiàn)在得到以下結(jié)果:

因?yàn)?x 和 y 引用同一個(gè)對(duì)象,所以對(duì) x 執(zhí)行的所有方法與對(duì) y 執(zhí)行的方法都作用于同一個(gè)對(duì)象。

區(qū)分引用類型和原始類型并理解引用的語義是很重要的。若做不到這一點(diǎn),則會(huì)使編寫的代碼無法完成預(yù)定工作。

以上就是“Java中引用類型和原始類型有哪些區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享名稱:Java中引用類型和原始類型有哪些區(qū)別
網(wǎng)頁地址:http://weahome.cn/article/peoeed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部