Java 數(shù)據(jù)類型
??在 Java 中聂抢,對于每一種數(shù)據(jù)都定義了明確的具體的數(shù)據(jù)類型钧嘶,在內(nèi)存中分配了不同大小的內(nèi)存空間。
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/.mBpniB9GEZZKwWgIt9Zx8xHm9LsBxW.r3naT1p7z6g!/b/dLYAAAAAAAAA&bo=dwN9AQAAAAADByo!&rf=viewer_4" width="600"></p></center>
整數(shù)類型 (byte琳疏、short有决、int、long)
1.Java 各整數(shù)類型有固定的表數(shù)范圍和字段長度空盼,不受具體 OS{操作系統(tǒng):Operating System} 的影響书幕,以保證 java 程序的可移植性。
2.Java 的整數(shù)類型數(shù)據(jù)默認為 int 類型揽趾,聲明為 long 類型時須在變量值的末尾加上一個 'l' 或 'L' 台汇。
//1.定義 long 型變量,值的末尾需加 'l' 或 'L'。
//2.整數(shù)類型的數(shù)據(jù)默認是 int 類型苟呐,聲明為 long 類型時不添加 'l' 或 'L' 不會報錯痒芝。
//3.不加 'L' 默認是 int 型,int 轉(zhuǎn)為 long 是安全的牵素,所以會自動轉(zhuǎn)吼野,能編譯通過。
//4.當變量值超過了 int 的表數(shù)范圍時两波,必須添加 'l' 或 'L' ,否則編譯不通過闷哆,會報錯腰奋!
long l1 = 231457l;
long l2 = 567323L;
3.聲明 long 型變量變量值后不加 'l' 或 'L' 編譯可以通過,原因是整型變量值默認是 int 類型抱怔,占用 4 字節(jié)劣坊,聲明為 long 類型為 8 個字節(jié),int 轉(zhuǎn)為 long 是安全的(小轉(zhuǎn)大為自動類型轉(zhuǎn)換)屈留,不會損失精度局冰,能編譯通過,因此不會報錯灌危。
4.byte 字節(jié)康二、bit 位,一個位只能存儲 0 或 1 勇蝙,1 個字節(jié)等于 8 個位(1byte=8bit)沫勿,電腦存文件底層使用的是字節(jié)(byte)。
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/22FxMkYCj4D5JiQtZ0S5v0OlAT5.P9OUd1mZ9qzOTy8!/b/dDYBAAAAAAAA&bo=TAMAAQAAAAADB2w!&rf=viewer_4" width="600"></p></center>
浮點類型 (float味混、double)
1.浮點類型是帶小數(shù)點的數(shù)值产雹,與整數(shù)類型類似,Java 浮點類型也有固定的表數(shù)范圍和字段長度翁锡,不受具體 OS 的影響蔓挖。
2.Java 的浮點類型數(shù)據(jù)默認為 double 類型,聲明為 float 類型時須在變量值的末尾加上一個 'f' 或 'F' 馆衔。
//1.定義 float 型變量瘟判,值的末尾需加 'f' 或 'F'。
//2.浮點類型的數(shù)據(jù)默認是 double 類型角溃,聲明為 float 類型時不添加 'f' 或 'F' 會報錯荒适,編譯不通過!
//3.浮點數(shù)不加 'F' 默認是 double 類型开镣,double 轉(zhuǎn) float 可能損失精度刀诬,因為不會自動轉(zhuǎn),編譯是通不過的。
float f1 = 12.3f;
float f2 = 12.3F;
3.聲明 float 型變量變量值后不加 'f' 或 'F' 編譯不能通過陕壹,原因是浮點型變量值默認是 double 類型质欲,占用 8 字節(jié),聲明為 float 類型為 4 個字節(jié)糠馆,大轉(zhuǎn)小為強制類型轉(zhuǎn)換嘶伟,會損失精度,因此會報錯又碌。
4.浮點型常量有兩種表示形式:
【琶痢①十進制數(shù)形式,如:5.12毕匀、512.0f铸鹰、.512 (必須有小數(shù)點)
②科學計數(shù)法形式皂岔,如:5.12e2蹋笼、512E2、100E-2
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/C7dnA1Vfnpffqj7BJ67Ec4CIPWn7.DEV2TqM2mQKv8!/b/dLgAAAAAAAAA&bo=TAOSAAAAAAADB8!&rf=viewer_4" width="600"></p></center>
字符類型 (char)
1.char 類型用來表示通常意義上的 "字符" (2字節(jié))躁垛, char 只能表示一個字符(如中文字符剖毯、英文字符、標點符號教馆、轉(zhuǎn)義字符逊谋、Unicode 值等),要是多個字符需要使用 String 字符串來表示土铺。
2.char 類型是可以進行運算的涣狗,因為它都對應有 Unicode 碼。一個 char 占用 2 個字節(jié)。
4.字符型常量的三種表現(xiàn)形式:
①字符常量是用單引號 ('')括起來的單個字符融撞,涵蓋世界上所有書面語的字符碰声。
char c1 = 'a'; // 使用 char 表示英文字符
char c2 = 'ab'; ? // char 只能表示一個字符,'ab' 應該聲明為 String 類型
char c3 = '中'; // 使用 char 表示中文字符
????????②Java 中還允許使用轉(zhuǎn)義字符 '\' 來將其后的字符轉(zhuǎn)變?yōu)樘厥庾址统A俊?br> <center>
轉(zhuǎn)義字符 | 說明 | 轉(zhuǎn)義字符 | 說明 |
---|---|---|---|
\n | 換行符 | \r | 回車符 |
\t | 制表符 | \b | 退格符 |
\' | 單引號 | \" | 雙引號 |
\|反斜線 | |轉(zhuǎn)義符 |
</center>
//1.使用 char 表示轉(zhuǎn)義字符,每一個轉(zhuǎn)義字符都是一個字符
char c1 = ‘\n’; // '\n' 為換行符
char c2 = ‘\t’; // '\t' 為制表符,相當于 tab 鍵
//2.程序中使用 " \ " 來進行符號的轉(zhuǎn)義。
System.out.println("魏鑫是個\"帥\"哥"); // 帥加個雙引號
????????③直接使用 Unicode 值來表示字符型常量:‘\uXXXX’窟赏。其中,XXXX代表一個十六進制整數(shù)箱季。
//使用 char 表示 Unicode 值
char c1 = "\u000a"; // '\u000a' 表示換行符 "\n"涯穷。
char c2 = '\u1234'; // '\u1234' 表示一個 "?" 號。
布爾類型 (boolean)
1.boolean 類型適于邏輯運算藏雏,一般用于程序流程控制拷况。
● if 條件控制語句???????????● for 循環(huán)控制語句
● while 循環(huán)控制語句?????● do-while 循環(huán)控制語句
2.boolean 類型變量只允許取值 true 和 false,不能取值為 null。
3.不可以使用 0 或非 0 的整數(shù)替代 false 和 true赚瘦,這點和 C 語言不同粟誓。
//boolean 類型只允許取值 true 和 false
boolean b1 = true;
boolean b2 = false;
String 類型
? 字符串也是一種數(shù)據(jù)類型,即 String 類型起意,String 是一個不可變類鹰服,屬于引用數(shù)據(jù)類型。
? String 類型用于表示由零或多個 16 位 Unicode 字符組成的字符序列揽咕,即字符串悲酷。字符串可由單引號或者雙引號表示,字符串由零個或多個字符構(gòu)成亲善,字符包括字母设易、數(shù)字、標點符號和空格逗爹。字符串必須放在引號里,單引號和雙引號都允許使用嚎于。
? String 類屬于引用類型掘而,可以使用 null 賦值。String 類是一個典型的不可變類于购,String 對象創(chuàng)建出來就不可能被改變袍睡,創(chuàng)建出的字符串將存放在數(shù)據(jù)區(qū),保證每個字符串常量只有一個肋僧,不會產(chǎn)生多個副本斑胜。
String s0 = "hello";
String s1 = "hello";
String s2 = "he" + "llo";
String s3 = new String("hello");
System.out.println(s0==s1); //true
System.out.println(s0==s2); //true
System.out.println(s0==s3); //false
//如何理解 String s3 = new String(“hello”); ?
? 字符串的賦值可以為 <font color="red">"字符串"</font> 嫌吠,也可以是 <font color="red">數(shù)字 +"字符串"</font> 的形式止潘。字符串與基本數(shù)據(jù)類型不兼容,不能進行數(shù)據(jù)類型轉(zhuǎn)換辫诅,否則編譯報錯凭戴。
? 字符串與基本數(shù)據(jù)類型之間的運算只能是連接運算 ,使用加號(+)表示連接炕矮,得到的結(jié)果仍為一個字符串么夫。
? 值 null 可以賦值給任何引用類型的變量(類、接口肤视、數(shù)組) 档痪,用以表示這個引用類型變量中保存的地址為空。
//字符串也是一種數(shù)據(jù)類型 String 類型
String s = "abc";
int i = 123;
//字符串與基本數(shù)據(jù)類型之間的運算只能是連接運算(+)邢滑,得到的結(jié)果仍為一個字符串腐螟。
String str = s+i; // 加號 "+" 表示連接
System.out.println(str); //結(jié)果為:abc123
//字符串與基本數(shù)據(jù)類型不兼容,不能進行數(shù)據(jù)類型轉(zhuǎn)換,否則編譯報錯遭垛。
//String s1 = 12; 【?】
String s2 = "12"; //字符串的賦值為 "字符串" 的形式
String s3 = 12 + ""; //字符串的賦值為 數(shù)字+"字符串" 的形式
自動類型轉(zhuǎn)換
? 在 java 程序中尼桶,不同的<font color="red">基本數(shù)據(jù)類型</font>的值經(jīng)常需要進行相互類型轉(zhuǎn)換,類型轉(zhuǎn)換分為自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換锯仪。布爾類型 boolean 占有一個字節(jié)泵督,由于其本身所代表的特殊含義,boolean 類型與其他基本數(shù)據(jù)類型不能進行類型的轉(zhuǎn)換(既不能進行自動類型的提升庶喜,也不能強制類型轉(zhuǎn)換)小腊,否則,將編譯出錯久窟。
? java 的所有數(shù)值型變量可以進行相互轉(zhuǎn)換秩冈,如果系統(tǒng)支持把某種基本類型的值直接賦值給另一種基本類型的變量,則這種方式成為自動類型轉(zhuǎn)換斥扛。當把一個表數(shù)范圍較小的數(shù)值或變量直接賦給另外一個表數(shù)范圍比較大的變量時入问,系統(tǒng)將可以自動類型轉(zhuǎn)換,否則需要強制轉(zhuǎn)換稀颁。
? 自動類型轉(zhuǎn)換:當容量小的數(shù)據(jù)類型與容量大的數(shù)據(jù)類型做運算時芬失,容量小的類型會自動轉(zhuǎn)換為容量大的數(shù)據(jù)類型。Ps:容量的大小是指表數(shù)范圍的大小匾灶,即占內(nèi)存的空間大小棱烂。
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/SZpv*ygeaeuMvqXF269KPfI6JACwSfyc6S.80KKGBds!/b/dL4AAAAAAAAA&bo=ewN.AAAAAAARBzY!&rf=viewer_4" width="600"></p></center>
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/LsDkMkXg6eDprSVu8c0kmTf8uI65WEm*5TjvM39iQpg!/b/dL4AAAAAAAAA&bo=4wJKAQAAAAARB5o!&rf=viewer_4" width="600"></p></center>
? 變量之間是可以進行運算的(除 boolean 類型變量外),運算的過程中會涉及到自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換阶女。<font color="red">當有多種類型的數(shù)據(jù)混合運算時颊糜,系統(tǒng)首先自動將所有數(shù)據(jù)轉(zhuǎn)換成容量最大的那種數(shù)據(jù)類型,然后再進行計算</font>秃踩。注意點:①byte衬鱼,short,char 之間不會相互轉(zhuǎn)換憔杨,他們?nèi)咴谟嬎銜r首先轉(zhuǎn)換為 int 類型馁启。 ②boolean 類型不可以轉(zhuǎn)換為其它的數(shù)據(jù)類型。③char 字符類型的數(shù)據(jù)都對應著一個 Unicode 值芍秆,因此也可以用來運算惯疙。
? 基本類型轉(zhuǎn)換為字符串:當把任何基本類型的值和字符串值進行連接運算時(使用 + 進行連接運算),基本類型的值將自動轉(zhuǎn)換為字符串類型妖啥。因此霉颠,如果想將基本類型的值轉(zhuǎn)換為對應的字符串,可以把基本類型的值和一個空字符串進行連接荆虱。
//自動類型轉(zhuǎn)換
long l = 12L; // 8字節(jié)
float f = l; // 4字節(jié)
char c = 'a'; // 'a' 的 Unicode 值為 97蒿偎,'A' 的 Unicode 值為 65
int i = c+1;
System.out.println(i); //結(jié)果為:98
byte b = 1;
short s = 12;
//1.當char 朽们、byte、short類型的變量之間做運算時诉位,默認的結(jié)果為 int 類型骑脱。
//2.當char 、byte苍糠、short類型的變量自身做運算時叁丧,默認的結(jié)果類型也為 int 類型。
//3.規(guī)定char 岳瞭、byte拥娄、short運算默認轉(zhuǎn)換為int類型的原因:char 、byte瞳筏、short的表數(shù)范圍很小稚瘾,運算時很容易超出范圍。
//short s1 = b+s; 【?】
//char c1 = c+b; 【?】
強制類型轉(zhuǎn)換
? 強制類型轉(zhuǎn)換:即強制顯示的把一種數(shù)據(jù)類型轉(zhuǎn)換為另外一種數(shù)據(jù)類型姚炕。強制類型轉(zhuǎn)換是自動類型轉(zhuǎn)換的逆過程摊欠,將容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型,使用時要加上強制轉(zhuǎn)換符:<font color="red">(目標數(shù)據(jù)類型)</font>柱宦。強制類型轉(zhuǎn)換可能造成精度損失些椒、降低或溢出,格外要注意捷沸。
//強制類型轉(zhuǎn)換的運算符是圓括號:(目標數(shù)據(jù)類型)
目標數(shù)據(jù)類型 變量名 = (目標數(shù)據(jù)類型) Value;
? Java 中的類型轉(zhuǎn)換就像倒水摊沉,如下圖所示狐史,小杯的水倒進大杯痒给,水就不會流失。但是骏全,如果大杯的水向小杯里倒苍柏,那么水就有可能會溢出來。類型轉(zhuǎn)換也是一樣姜贡,容量大的數(shù)據(jù)類型就像是大杯里的水试吁,容量小的數(shù)據(jù)類型就像小杯里的水,如果把容量大的數(shù)據(jù)類型的變量的值賦給容量小的數(shù)據(jù)類型的變量楼咳,當數(shù)據(jù)大小超過容量小的數(shù)值類型的表數(shù)范圍時熄捍,就會發(fā)生數(shù)據(jù)截斷,數(shù)據(jù)將會丟失母怜。說明:強制類型轉(zhuǎn)換很容易造成精度損失余耽、降低或溢出,使用時加倍小心苹熏。
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/yIbyoQbNCVsZ745EKnYPHsLvhhcV*629eBMnJuTPQLw!/b/dFMBAAAAAAAA&bo=EAIEAQAAAAADBzU!&rf=viewer_4"></p></center>
? boolean 類型不可以轉(zhuǎn)換為其它的數(shù)據(jù)類型碟贾。
? 通常币喧,字符串不能直接轉(zhuǎn)換為基本類型,但通過基本類型對應的包裝類則可以實現(xiàn)把字符串轉(zhuǎn)換成基本類型袱耽。
//案例
String a = "123";
int i = Integer.parseInt(a);
//1.強制類型轉(zhuǎn)換:容量大轉(zhuǎn)換為容量小的杀餐,要使用強制類型轉(zhuǎn)換符 () 。
long l = 12345L;
int i = (int)l;
//2.強制類型轉(zhuǎn)換的問題:容易導致精度的損失
int i2 = 12345;
byte b = (byte)i2;
System.out.println(b); // 結(jié)果為:57 朱巨,造成了精度的損失
//原因:造成精度損失史翘,int為8字節(jié)32位,byte為1字節(jié)為8位蔬崩,將int的32位從高位往底位砍到8位為止【高位字節(jié)數(shù)據(jù)丟失】恶座,最后的十進制結(jié)果為 57。
//小貼士:可使用電腦自帶的計算機沥阳,選擇程序員模式進行結(jié)果測試跨琳。
? 總結(jié)
1.java 中整數(shù)類型默認是 int 類型,小數(shù)類型默認是 double 類型桐罕。
2.char 類型可以當做一種特殊的整數(shù)類型脉让,每一個字符對應著一個 Unicode 值。
3.boolean 類型不能轉(zhuǎn)換為其它數(shù)據(jù)類型功炮,其它類型也不能轉(zhuǎn)換為 boolean 類型溅潜。
4.小數(shù)類型轉(zhuǎn)為整數(shù)類型,小數(shù)可能被舍棄薪伏,出現(xiàn)精度損失滚澜,所以需要強制轉(zhuǎn)換。
表達式類型的自動提升
? 當一個 java 算術(shù)表達式中包含多個基本類型的值時嫁怀,整個算術(shù)表達式的數(shù)據(jù)類型將發(fā)生自動提升设捐。
? Java定義如下的自動提升規(guī)則:
①所有 byte 型塘淑、short 型和 char 型將被提升到 int 型萝招。
②整個算術(shù)表達式的數(shù)據(jù)類型自動提升到與表達式中最高等級操作數(shù)同樣的類型存捺。操作數(shù)的等級排列如下圖所示槐沼,位于箭頭右邊類型的等級高于位于箭頭左邊類型的等級。
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/m5mQUizvYsO0I8zTiIvGYoNC73hSqWMAi5sHRjVgQ!/b/dL8AAAAAAAAA&bo=bwNkAAAAAAADByo!&rf=viewer_4" width="600"></p></center>
1.下面程序示范了一個典型的錯誤:
//定義一個short類型變量
short sValue = 5;
//表達式中的sValue將自動提升到int類型捌治,則右邊的表達式類型為 int
//將一個int類型賦給short類型的變量將發(fā)生錯誤岗钩。
sValue = sValue - 2;
//上面的 sValue -2 表達式的類型將被提升到int類型,這樣就是把右邊的int型值賦給左邊的short型變量肖油,從而引起錯誤兼吓。
2.表達式類型自動提升的正確示例代碼
byte b = 40;
char c = 'a';
int i = 23;
double d = .314; //0.314
//右邊表達式中在最高等級操作數(shù)為 d(double型)
//則右邊表達式的類型為double型,故賦給一個double型變量
double result = b + c + i * d;
//將輸出144.222
System.out.println(result);
//注意點:表達式的類型將嚴格保持和表達式中最高等級操作數(shù)相同的類型
3.兩個 int 整數(shù)進行除法運算,即使無法除盡构韵,也將得到一個 int 結(jié)果周蹭。
int val = 3;
//右邊表達式中2個操作數(shù)都是int趋艘,故右邊表達式的類型為int
//因此,雖然23/3不能除盡凶朗,依然得到一個int整數(shù)
int intResult = 23 / val;
//將輸出7
System.out.println(intResult);
//當兩個整數(shù)進行除法運算時瓷胧,如果不能整數(shù),得到結(jié)果將是把小數(shù)部分截斷取整后的整數(shù)棚愤。
4.如果表達式中包含了字符串搓萧,則又是另一番情形:因為把加號(+)放在字符串和基本類型值之間時,這個加號是一個字符串連接運算符宛畦,而不是進行加法運算瘸洛。
//輸出字符串Hello!a7
System.out.println("Hello!" + 'a' + 7);
//輸出字符串104Hello!
System.out.println('a' + 7 + "Hello!");
//1.第一個表達式"Hello!" + 'a' + 7,先進行"Hello!" + 'a'的運算次和,將把'a'轉(zhuǎn)換成字符串反肋,將拼接成字符串Hello!a,接著進行"Hello!a" + 7的運算踏施,這也是一個字符串連接運算石蔗,得到結(jié)果是Hello!a7。
//2.第二個表達式畅形,先進行'a' + 7加法運算养距,其中'a'自動提升到int型,變成a對應的ASCII值:97日熬,從97 + 7將得到104棍厌,然后進行104 + "Hello!",104會自動轉(zhuǎn)換成字符串竖席,將變成兩個字符串的連接運算耘纱,從而得到104Hello!。
Java 變量
變量的概念
1.變量的概念:變量是內(nèi)存中的一個存儲區(qū)域怕敬,該區(qū)域有自己的名稱(變量名)和類型(數(shù)據(jù)類型)揣炕,該區(qū)域的數(shù)據(jù)可以在同一類型范圍內(nèi)不斷變化帘皿。
2.在 Java 中东跪,對于每一種數(shù)據(jù)都定義了明確的具體數(shù)據(jù)類型,在內(nèi)存中分配了不同大小的內(nèi)存空間鹰溜。
3.Java 中的每個變量都必須先聲明虽填,后使用。
4.變量的作用域:Java 中的變量是有作用范圍(Scope)的曹动,也稱作用域斋日。一旦超出變量的作用域,就無法再使用這個變量墓陈。在程序中恶守,變量一定會被定義在某一對大括號中第献,該大括號所包含的代碼區(qū)便是這個變量的作用域。即<font color="red"> Java 變量的作用域為一對 { } 之間有效兔港。</font> Ps:是距離變量最近的 {} 內(nèi)有效庸毫。
5.Java 中的每個變量都會有一個初始化值,默認初始化或顯示初始化衫樊。
6.變量是通過使用變量名來訪問這塊區(qū)域的飒赃。
7.Java 中定義變量的格式:
//Java 變量的語法
數(shù)據(jù)類型 變量名 = 初始化值;
變量的分類
1.按數(shù)據(jù)類型:基本數(shù)據(jù)類型(8種)和引用數(shù)據(jù)類型(類、接口科侈、數(shù)組)载佳。
- 在 Java 中,對于每一種數(shù)據(jù)都定義了明確的具體數(shù)據(jù)類型臀栈,在內(nèi)存中分配了不同大小的內(nèi)存空間蔫慧。
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/.mBpniB9GEZZKwWgIt9Zx8xHm9LsBxW.r3naT1p7z6g!/b/dLYAAAAAAAAA&bo=dwN9AQAAAAADByo!&rf=viewer_4" width="600"></p></center>
2.按聲明的位置的不同:
①在方法體外权薯,類體內(nèi)聲明的變量稱為成員變量藕漱。
②在方法體內(nèi)部聲明的變量稱為局部變量崭闲。
±吡③成員變量和局部變量在初始化值方面的異同:【同】都有生命周期 【異】局部變量除形參外,需顯式初始化刁俭。
<center><p><img src="http://m.qpic.cn/psb?/V12fNjAq1vzOr1/2yR9mLQEDQQpALqM1Wv7CRgz5JKjEShYxpkdhll.uZQ!/b/dLYAAAAAAAAA&bo=GQNAAQAAAAADB3k!&rf=viewer_4" width="600"></p></center>
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布橄仍!