1.數據類型
在Java中數據類型主要分為兩類:基本數據類型和引用數據類型。
基本數據類型有四類八種: 1. 四類:整型、浮點型、字符型以及布爾型
2.八種:
?整形是分為如上四種 byte short int? long
?浮點型分為 float?和double?
其中需要特別注意的是? byte內存占用為1字節? ?char內存占用為2字節。和我們之前c語言中學到的很不一樣。
需要注意的點?
1.不論是在16位系統還是32位系統,int都占用4個字節,long都占8個字節。其他數據類型也同理(可以說這不像c語言一樣,其java是可移植的,無論在哪個系統,其數據類型所占字節都是固定的)
2.在java中整形和浮點型都是有符號的,不存在無符號。(跟c的區別,c有無符號和有符號之分,更加復雜)
3.整型默認為int型,浮點型默認為double
4字符串屬于引用類型,該中類型后序介紹。 ?
2.變量?
對于java來說 ,其為了安全性 ,變量在使用前是需要定義好值的,否則如果沒定義好值就使用會導致編譯期間報錯。(這在c語言里是不可能的,C語言就算變量未定義也是可以使用的)
?對于給變量賦值,其值一定不要超出其變量取值范圍
1.整形?
特殊說明:在整形中,長整型變量(long)的初始值后要加L或者l,推薦加L。 (其他整形變量都沒這個要求)
2.浮點型
int a = 1;
int b = 2;
System.out.println(a / b); //輸出0
跟c語言一樣。在 Java 中, int 除以 int 的值仍然是 int(會直接舍棄小數部分),。如果想得到 0.5, 需要使用 double 類型計算. ?
double a = 1.0;
double b = 2.0;
System.out.println(a / b); ? // 輸出0.5
?double float 類型的內存布局遵守 IEEE 754 標準(和C語言一樣), 嘗試使用有限的內存空間表示可能無限的小數, 勢必會存在一定的精度誤差,因此浮點數是個近似值,并不是精確值。這個叫做精度損失,之前在c語言中講過。
所以會出現以下代碼,就是精度損失的一個很好的例子。
double num = 1.1;
System.out.println(num * num); ?// 輸出1.21嗎?// 執行結果
1.2100000000000002
因為java更注重安全性,所以對于將float初始化,需要將其浮點型常量后面加個f或者F,否則會報錯(c語言并不會報錯)
?oat num = 1.0f; ? ?// 寫作 1.0F 也可以
由于float表示的數據精度范圍較小, 一般在工程上用到浮點數都優先考慮 double, 不太推薦使用 ?oat.?
3.字符型?
?Java 中使用 單引號 + 單個字母 的形式表示字符。
無論是哪種語言,計算機中的字符本質上都是屬于整數. 在 C 語言中使用 ASCII 表示字符, 而 Java中我們使用Unicode表示字符.
unicode表包含ascall表,unicode表能表示范圍更大。
unicode中一個字符占用兩個字節,所以可以表示的字符種類更多, 包括中文.
char ch = '呵';
System.out.println(ch);
4.布爾類型?
boolean 類型的變量只有兩種取值, true 表示真, false 表示假
Java 的 boolean 類型和 int 不能相互轉換, 不存在 1 表示 true, 0 表示 false 這樣的用法.(強制轉換雙方都不能進行)
(c語言中bool能與int類型相互轉換,所以0能隱式轉換為true,其他數字能隱式轉換為false,)
Java虛擬機規范中,并沒有明確規定boolean占幾個字節,也沒有專門用來處理boolean的字節碼指令?
?3.類型轉換
?Java 作為一個強類型編程語言, 當不同類型之間的變量相互賦值的時候, 會有較嚴格的校驗.而跟c語言對比來說,c語言的類型轉換規則就顯得很寬松,很容易就能類型轉換。
自動類型轉換(隱式)
?自動類型轉換即:代碼不需要經過任何處理,在代碼編譯時,編譯器會自動進行處理。特點:數據范圍小的轉為數據范圍大的時才會自動轉換。(特殊情況不遵循,如下)
(c語言的隱式轉換更簡單,無論是小轉換為大還是大轉換為小都可以)
當給變量賦常量值時,其隱式轉換并不符合上述所說,它的隱式轉換有自己的規矩,其規則我們在上面已經說過了,再說一遍。
將一個字面值常量進行賦值的時候, Java 會自動針對數字范圍進行檢查。
byte,short只要填整數常量就行,它會自動隱式整換。int填整數常量。 long需要整數常量后加個L如101L.? ?float在賦值時需要后面加個f如1.14f 。double只要正常浮點數就行.
?強制類型轉換(顯式)
c語言已經講的很清楚,這里不詳細展示?
強制類型轉換不一定能成功,不相干的類型依舊不能互相轉換 ,如在java中boolean和int之間不能強制轉換(c語言當然可以)
4.類型提升?
如果參與計算的都是低于等于4字節大小的數據類型,就會將其提升到四字節類型再計算。原因是由于計算機的 CPU 通常是按照 4 個字節為單位從內存中讀寫數據. 為了硬件上實現方便, 諸如 byte 和 short 這種低于 4 個字節的類型, 會先提升成 int, 再參與計算. ?
如果有大于4個字節類型的數據參與計算,如long,則就全隱式轉換為long類型再計算。
下面給幾個例子
?
所以這就是java的類型提升。
其實對于類型轉換和類型提升這兩個概念在c語言就講過了,只不過java跟c語言在這兩方面上還是有差別的,所以要重新講。
5.字符串類型?
?這是c語言所沒有的類型,但是c語言有指針可以代替它。
字符串類型不屬于java的基本類型,屬于引用數據類型。
?在Java中使用String類定義字符串類型,比如:
public static void main(String[] args) {String s1 = "hello";String s2 = " world";System.out.println(s1);System.out.println(s2);System.out.println(s1+s2); ? // s1+s2表示:將s1和s2進行拼接
}
?在java中,字符串跟c語言中字符串不一樣,這里結尾并不存在隱藏的\0,所以在從底層來說可以將字符串認為是數組。
?在java中字符串可以被+拼接 ,如“hello”+4=“hello4” ,10+20+“hello”=“30hello”,“hello”+10+20=“hello1020”.
?
?對于其轉換方法運用了包裝類型和String,該知識點比較深,就不細展開了,看一下了解下就可以了。