欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java中的數(shù)據(jù)類型有哪些

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Java中的數(shù)據(jù)類型有哪些,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的云和網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1. 數(shù)據(jù)類型:

在Java源代碼中,每個(gè)變量都必須聲明一種類型(type)。Java數(shù)據(jù)類型(type)可以分為兩大類:基本類型(primitive types)和引用類型(reference types)。primitive types 包括boolean類型以及數(shù)值類型(numeric types)。numeric types又分為整型(integer types)和浮點(diǎn)型(floating-point type)。整型有5種:byte short int long char(char本質(zhì)上是一種特殊的int)。浮點(diǎn)類型有float和double。關(guān)系整理一下如下圖:

Java中的數(shù)據(jù)類型有哪些

2. 基本類型:

Java為基本類型提供語(yǔ)言級(jí)別的支持,即已經(jīng)在Java中預(yù)定義,用相應(yīng)的保留關(guān)鍵字表示?;绢愋褪菃蝹€(gè)值,而不是復(fù)雜的對(duì)象,基本類型不是面向?qū)ο蟮?,主要出去效率方面的考慮,但是同時(shí)也提供基本類型的對(duì)象版本,即基本類型的包裝器(wrapper)??梢灾苯邮褂眠@些基本類型,也可以使用基本類型構(gòu)造數(shù)組或者其他自定義類型?;绢愋途哂忻鞔_的取值范圍和數(shù)學(xué)行為。

2.1 整型

整型有byte short int long char,分別用8、16、32、64、16bits表示。有些地方可能不會(huì)把char列入整型范疇,但本質(zhì)上char類型是int的一個(gè)子集。整型的寬度不應(yīng)該被看成整數(shù)所占用的內(nèi)存空間大小,而應(yīng)當(dāng)理解成定義為整型的變量或者表達(dá)式的行為。JVM可以自由使用它們希望的、任何大小的內(nèi)存空間,只要類型的行為符合規(guī)范。byte short int long都是有符號(hào)的,用2的補(bǔ)碼(two‘s-complement)表示。而char用16位表示,它是無(wú)符號(hào)的,表示的是UTF-16編碼集。

2.1.1 byte

byte由1個(gè)字節(jié)8位表示,是最小的整數(shù)類型。主要用于節(jié)省內(nèi)存空間關(guān)鍵。當(dāng)操作來(lái)自網(wǎng)絡(luò)、文件或者其他IO的數(shù)據(jù)流時(shí),byte類型特別有用。取值范圍為:[-128, 127]. byte的默認(rèn)值為(byte)0,如果我們?cè)噲D將取值范圍外的值賦給byte類型變量,則會(huì)出現(xiàn)編譯錯(cuò)誤,例如 byte b = 128;這個(gè)語(yǔ)句是無(wú)法通過(guò)編譯的。一個(gè)有趣的問(wèn)題,如果我們有個(gè)方法: public void test(byte b)。試圖這么調(diào)用這個(gè)方法是錯(cuò)誤的: test(0); 編譯器會(huì)報(bào)錯(cuò),類型不兼容?。。∥覀冇浀胋yte b =0;這是完全沒(méi)有問(wèn)題的,為什么在這里就出錯(cuò)啦?

這里涉及到一個(gè)叫字面值(literal)的問(wèn)題,字面值就是表面上的值,例如整型字面值在源代碼中就是諸如 5 , 0, -200這樣的。如果整型子面子后面加上L或者l,則這個(gè)字面值就是long類型,比如:1000L代表一個(gè)long類型的值。如果不加L或者l,則為int類型?;绢愋彤?dāng)中的byte short int long都可以通過(guò)不加L的整型字面值(我們就稱作int字面值吧)來(lái)創(chuàng)建,例如 byte b = 100; short s = 5;對(duì)于long類型,如果大小超出int所能表示的范圍(32 bits),則必須使用L結(jié)尾來(lái)表示。整型字面值可以有不同的表示方式:16進(jìn)制【0X or 0x】、10進(jìn)制【nothing】、八進(jìn)制【0】2進(jìn)制【0B or 0b】等,二進(jìn)制字面值是JDK 7以后才有的功能。在賦值操作中,int字面值可以賦給byte short int long,Java語(yǔ)言會(huì)自動(dòng)處理好這個(gè)過(guò)程。如果方法調(diào)用時(shí)不一樣,調(diào)用test(0)的時(shí)候,它能匹配的方法是test(int),當(dāng)然不能匹配test(byte)方法,至于為什么Java沒(méi)有像支持賦值操作那樣支持方法調(diào)用,不得而知。注意區(qū)別包裝器與原始類型的自動(dòng)轉(zhuǎn)換(anto-boxing,auto-unboxing)。byte d = 'A';也是合法的,字符字面值可以自動(dòng)轉(zhuǎn)換成16位的整數(shù)。
對(duì)byte類型進(jìn)行數(shù)學(xué)運(yùn)算時(shí),會(huì)自動(dòng)提升為int類型,如果表達(dá)式中有double或者float等類型,也是自動(dòng)提升。所以下面的代碼是錯(cuò)誤的:

byte s2 = 'a'; 
 byte sum = s1 + s2;//should cast by (byte)</span></span></span> 

2.1.2 short

用16為表示,取值范圍為:[- 2^15, 2^15 - 1]。short可能是最不常用的類型了。可以通過(guò)整型字面值或者字符字面值賦值,前提是不超出范圍(16 bit)。short類型參與運(yùn)算的時(shí)候,一樣被提升為int或者更高的類型。(順序?yàn)?byte short int long float double).

2.1.3 int

32 bits, [- 2^31, 2^31 - 1].有符號(hào)的二進(jìn)制補(bǔ)碼表示的整數(shù)。常用語(yǔ)控制循環(huán),注意byte 和 short在運(yùn)算中會(huì)被提升為int類型或更高。Java 8以后,可以使用int類型表示無(wú)符號(hào)32位整數(shù)[ 0, 2^31 - 1]。

2.1.4 long

64 bits, [- 2^63, 2^63 - 1,默認(rèn)值為0L].當(dāng)需要計(jì)算非常大的數(shù)時(shí),如果int不足以容納大小,可以使用long類型。如果long也不夠,可以使用BigInteger類。

2.1.5 char

16 bits, [0, 65535], [0, 2^16 -1],從'\u0000'到'\uffff'。無(wú)符號(hào),默認(rèn)值為'\u0000'。Java使用Unicode字符集表示字符,Unicode是完全國(guó)際化的字符集,可以表示全部人類語(yǔ)言中的字符。Unicode需要16位寬,所以Java中的char類型也使用16 bit表示。 賦值可能是這樣的:

char ch2 = 88;
char ch3 = 'A';

ASCII字符集占用了Unicode的前127個(gè)值。之所以把char歸入整型,是因?yàn)镴ava為char提供算術(shù)運(yùn)算支持,例如可以ch3++;之后ch3就變成Y。當(dāng)char進(jìn)行加減乘除運(yùn)算的時(shí)候,也被轉(zhuǎn)換成int類型,必須顯式轉(zhuǎn)化回來(lái)。

2.2 浮點(diǎn)類型

包含單精度的float和雙精度的double,分別用32、64bits表示,遵循IEEE 754規(guī)范。

2.2.1 float

使用32 bit表示,對(duì)應(yīng)單精度浮點(diǎn)數(shù),運(yùn)行速度相比double更快,占內(nèi)存更小,但是當(dāng)數(shù)值非常大或者非常小的時(shí)候會(huì)變得不精確。精度要求不高的時(shí)候可以使用float類型,聲明賦值示例:

f1 = 10L; 
 f1 = 10.0f; 
 //f1 = 10.0;默認(rèn)為double</span></span></span> 

可以將byte、short、int、long、char賦給float類型,java自動(dòng)完成轉(zhuǎn)換。

2.2.2 double

64為表示,將浮點(diǎn)子面子賦給某個(gè)變量時(shí),如果不顯示在字面值后面加f或者F,則默認(rèn)為double類型。java.lang.Math中的函數(shù)都采用double類型。

如果double和float都無(wú)法達(dá)到想要的精度,可以使用BigDecimal類。

2.3 boolean類型

boolean類型只有兩個(gè)值true和false,默認(rèn)為false。boolean與是否為0沒(méi)有任何關(guān)系,但是可以根據(jù)想要的邏輯進(jìn)行轉(zhuǎn)換。許多地方都需要用到boolean類型。

3. 字面值

在Java源代碼中,字面值用于表示固定的值(fixed value)。數(shù)值型的字面值是最常見(jiàn)的,字符串字面值可以算是一種,當(dāng)然也可以把特殊的null當(dāng)做字面值。字面值大體上可以分為整型字面值、浮點(diǎn)字面值、字符和字符串字面值、特殊字面值。

3.1. 整型字面值

從形式上看是整數(shù)的字面值歸類為整型字面值。例如: 10, 100000L, 'B'、0XFF這些都可以稱為字面值。整型字面值可以用十進(jìn)制、16、8、2進(jìn)制來(lái)表示。十進(jìn)制很簡(jiǎn)單,2、8、16進(jìn)制的表示分別在最前面加上0B(0b)、0、0X(0x)即可,當(dāng)然基數(shù)不能超出進(jìn)制的范圍,比如09是不合法的,八進(jìn)制的基數(shù)只能到7。一般情況下,字面值創(chuàng)建的是int類型,但是int字面值可以賦值給byte short char long int,只要字面值在目標(biāo)范圍以內(nèi),Java會(huì)自動(dòng)完成轉(zhuǎn)換,如果試圖將超出范圍的字面值賦給某一類型(比如把128賦給byte類型),編譯通不過(guò)。而如果想創(chuàng)建一個(gè)int類型無(wú)法表示的long類型,則需要在字面值最后面加上L或者l。通常建議使用容易區(qū)分的L。所以整型字面值包括int字面值和long字面值兩種。

3.2. 浮點(diǎn)字面值

浮點(diǎn)字面值簡(jiǎn)單的理解可以理解為小數(shù)。分為float字面值和double字面值,如果在小數(shù)后面加上F或者f,則表示這是個(gè)float字面值,如11.8F。如果小數(shù)后面不加F(f),如10.4。或者小數(shù)后面加上D(d),則表示這是個(gè)double字面值。另外,浮點(diǎn)字面值支持科學(xué)技術(shù)法表示。下面是一些例子:

double d2 = 11.4; 
 double d3 = 1.23E3; 
 double d4 = 10D; 
 double d5 = 0.4D; 
 float f1 = 10; 
 float f2 = 11.1F; 
 float f3 = 1.23e-4F; 
 float f4 = 1.23E0F;</span> 

3.3 字符及字符串字面值

Java中字符字面值用單引號(hào)括起來(lái),如‘@'‘1'。所有的UTF-16字符集都包含在字符字面值中。不能直接輸入的字符,可以使用轉(zhuǎn)義字符,如‘\n'為換行字符。也可以使用八進(jìn)制或者十六進(jìn)制表示字符,八進(jìn)制使用反斜杠加3位數(shù)字表示,例如'\141'表示字母a。十六進(jìn)制使用\u加上4為十六進(jìn)制的數(shù)表示,如'\u0061'表示字符a。也就是說(shuō),通過(guò)使用轉(zhuǎn)義字符,可以表示鍵盤上的有的或者沒(méi)有的所有字符。常見(jiàn)的轉(zhuǎn)義字符序列有:

\ddd(八進(jìn)制) 、 \uxxxx(十六進(jìn)制Unicode字符)、\'(單引號(hào))、\"(雙引號(hào))、\\ (反斜杠)\r(回車符) \n(換行符) \f(換頁(yè)符) \t(制表符) \b(回格符)

字符串字面值則使用雙引號(hào),字符串字面值中同樣可以包含字符字面值中的轉(zhuǎn)義字符序列。字符串必須位于同一行或者使用+運(yùn)算符,因?yàn)閖ava沒(méi)有續(xù)行轉(zhuǎn)義序列。

3.4 特殊字面值

null是一種特殊的類型(type),可以將它賦給任何引用類型變量,表示這個(gè)變量不引用任何東西。如果一個(gè)引用類型變量為null,表示這個(gè)變量不可用。

還有一種特殊的class literal,用type name加上.class表示,例如String.class。首先,String是類Class(java.lang.Class)的一個(gè)實(shí)例(對(duì)象),而"This is a string"是類String的一個(gè)對(duì)象。然后,class literal用于表示類Class的一個(gè)對(duì)象,比如String.class用于表示類Class的對(duì)象String。簡(jiǎn)單地說(shuō),類子面子(class literal)就是諸如String.class 、Integer.class這樣的字面值,它所表示的就是累String、類Integer。如果輸出Integer.class,你會(huì)得到class java.lang.Integer。List.class的輸出為interface java.util.List??傊?,class literal用于表示類型本身!

3.5 在數(shù)值型字面值中使用下劃線。

JDK7開(kāi)始,可以在數(shù)值型字面值(包括整型字面值和浮點(diǎn)字面值)插入一個(gè)或者多個(gè)下劃線。但是下劃線只能用于分隔數(shù)字,不能分隔字符與字符,也不能分隔字符與數(shù)字。例如 int x = 123_456_789.在編譯的時(shí)候,下劃線會(huì)自動(dòng)去掉??梢赃B續(xù)使用下劃線,比如float f = 1.22___33__44.二進(jìn)制或者十六進(jìn)制的字面值也可以使用下劃線,記住一點(diǎn),下劃線只能用于數(shù)字與數(shù)字之間,初次以外都是非法的。例如1._23是非法的,_123、11000_L都是非法的。

4. 基本類型之間的轉(zhuǎn)換

我們看到,將一種類型的值賦給另一種類型是很常見(jiàn)的。在Java中,boolean類型與所有其他7種類型都不能進(jìn)行轉(zhuǎn)換,這一點(diǎn)很明確。對(duì)于其他7中數(shù)值類型,它們之間都可以進(jìn)行轉(zhuǎn)換,但是可能會(huì)存在精度損失或者其他一些變化。轉(zhuǎn)換分為自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換。對(duì)于自動(dòng)轉(zhuǎn)換(隱式),無(wú)需任何操作,而強(qiáng)制類型轉(zhuǎn)換需要顯式轉(zhuǎn)換,即使用轉(zhuǎn)換操作符(type)。首先將7種類型按下面順序排列一下:

byte <(short=char)< int < long < float < double

如果從小轉(zhuǎn)換到大,可以自動(dòng)完成,而從大到小,必須強(qiáng)制轉(zhuǎn)換。short和char兩種相同類型也必須強(qiáng)制轉(zhuǎn)換。

4.1 自動(dòng)轉(zhuǎn)換

自動(dòng)轉(zhuǎn)換時(shí)發(fā)生擴(kuò)寬(widening conversion)。因?yàn)檩^大的類型(如int)要保存較小的類型(如byte),內(nèi)存總是足夠的,不需要強(qiáng)制轉(zhuǎn)換。如果將字面值保存到byte、short、char、long的時(shí)候,也會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。注意區(qū)別,此時(shí)從int(沒(méi)有帶L的整型字面值為int)到byte/short/char也是自動(dòng)完成的,雖然它們都比int小。在自動(dòng)類型轉(zhuǎn)化中,除了以下幾種情況可能會(huì)導(dǎo)致精度損失以外,其他的轉(zhuǎn)換都不能出現(xiàn)精度損失。

》int--> float
》long--> float
》long--> double
》float -->double without strictfp

除了可能的精度損失外,自動(dòng)轉(zhuǎn)換不會(huì)出現(xiàn)任何運(yùn)行時(shí)(run-time)異常。

4.2 強(qiáng)制類型轉(zhuǎn)換

如果要把大的轉(zhuǎn)成小的,或者在short與char之間進(jìn)行轉(zhuǎn)換,就必須強(qiáng)制轉(zhuǎn)換,也被稱作縮小轉(zhuǎn)換(narrowing conversion),因?yàn)楸仨氾@式地使數(shù)值更小以適應(yīng)目標(biāo)類型。強(qiáng)制轉(zhuǎn)換采用轉(zhuǎn)換操作符()。嚴(yán)格地說(shuō),將byte轉(zhuǎn)為char不屬于narrowing conversion),因?yàn)閺腷yte到char的過(guò)程其實(shí)是byte-->int-->char,所以widening和narrowing都有。強(qiáng)制轉(zhuǎn)換除了可能的精度損失外,還可能使模(overall magnitude)發(fā)生變化。強(qiáng)制轉(zhuǎn)換格式如下:

 byte b;  
 b = (byte)a;//1</span> 

如果整數(shù)的值超出了byte所能表示的范圍,結(jié)果將對(duì)byte類型的范圍取余數(shù)。例如a=256超出了byte的[-128,127]的范圍,所以將257除以byte的范圍(256)取余數(shù)得到b=1;需要注意的是,當(dāng)a=200時(shí),此時(shí)除了256取余數(shù)應(yīng)該為-56,而不是200.

將浮點(diǎn)類型賦給整數(shù)類型的時(shí)候,會(huì)發(fā)生截尾(truncation)。也就是把小數(shù)的部分去掉,只留下整數(shù)部分。此時(shí)如果整數(shù)超出目標(biāo)類型范圍,一樣將對(duì)目標(biāo)類型的范圍取余數(shù)。

7種基本類型轉(zhuǎn)換總結(jié)如下圖: 

Java中的數(shù)據(jù)類型有哪些

4.3 賦值及表達(dá)式中的類型轉(zhuǎn)換:

4.3.1 字面值賦值

在使用字面值對(duì)整數(shù)賦值的過(guò)程中,可以將int literal賦值給byte short char int,只要不超出范圍。這個(gè)過(guò)程中的類型轉(zhuǎn)換時(shí)自動(dòng)完成的,但是如果你試圖將long literal賦給byte,即使沒(méi)有超出范圍,也必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。例如 byte b = 10L;是錯(cuò)的,要進(jìn)行強(qiáng)制轉(zhuǎn)換。

4.3.2 表達(dá)式中的自動(dòng)類型提升

除了賦值以外,表達(dá)式計(jì)算過(guò)程中也可能發(fā)生一些類型轉(zhuǎn)換。在表達(dá)式中,類型提升規(guī)則如下:

所有byte/short/char都被提升為int。

如果有一個(gè)操作數(shù)為long,整個(gè)表達(dá)式提升為long。float和double情況也一樣。

上述就是小編為大家分享的Java中的數(shù)據(jù)類型有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:Java中的數(shù)據(jù)類型有哪些
瀏覽路徑:http://chinadenli.net/article20/ihssjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、面包屑導(dǎo)航動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、網(wǎng)站導(dǎo)航品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司