---
# System prepended metadata

title: 9/22 基本資料類型
tags: [JAVA]

---

###### tags: `JAVA`

# 9/22 基本資料類型

---

## 基本資料類型 (整數)
| 名稱 | Bytes | 科學記號 | 初值 | 範圍 |
| -------- | -------- | -------- | -------- | -------- |
| byte     | 1     | -2^7^~2^7^-1     |0     | -128~127     |
| short     | 2     | -2^15^~2^15^-1     |0     | -32768~32767     |
| int     | 4     | -2^31^~2^31^-1     |0     | 約±21億     |
| long     | 8     | -2^63^~2^63^-1     |0L     | 約±9.2\*10^18^     |

                                
                                  #1 byte = 8 bits


---
## 宣告變數
跟電腦要個記憶體存放變數
### 宣告方法
#### 單一變數 先宣告後賦值
* 資料型態 變數名稱;
* 變數名稱=賦予值;
```
int apple;
apple = 7;
```
#宣告變數只能一次，但值可以重複賦予。
#### 單一變數 宣告同時賦值
* 資料型態 變數名稱=賦予值;

```
int apple = 7;
```
#### 多個同型態變數 可連續宣告
* 資料型態 變數們以逗號區隔;
* 資料型態 變數們附值以逗號區隔

```
int a,b,c;
int a=1,b=2,c=3;
```
### 變數命名規則
#### 硬規定
* 命名材料:a\~z、A\~Z、0\~9、$、_
* 開頭不能是數字
* 不能是預設關鍵字(public、long、void...等)
#### 非強制規則(遵守才是好工程師)
* 這樣的變數名長得像駝峰(Camel Case)
* 小寫開頭
* 後面還有其他單字要大寫開頭
* 命名要簡短有意義
* 命名舉例 : *lichKing 巫妖王*
#### 例外
* 常數變數(Constant)通常全部大寫

```
Alt+shift+R 可一次改名同個變數(refactor)
```
#### 補充個Java常用命名方式
* package name (全小寫) : xxxyyyzzz
* 類名、介面名 (大駝峰) : XxxYyyZzz
* 變數名、方法名 (小駝峰): xxxYyyZzz
* 常量名 (大寫蛇形) : XXX_YYY_ZZZ
---
## byte 怎麼計算 (8 bits)
最左邊的數代表正負(0+、1-)
10000000 = -128
00000001 = +1

---
## 基本資料類型 (浮點數)
| 名稱 | Bytes | 科學記號 | 初值 | 說明 |
| -------- | -------- | -------- | -------- | -------- |
| float     | 4     | ±3.4\*10^38^\~ ±1.4\*10^-45^     |0.0f     | 精度7位，預設Double所以要加f。     |
| double     | 8     | ±1.8\*10^308^\~ ±4.9\*10^-32^     |0.0     | 精度15位，小數點都預設Double。     |

#精度為保證沒錯的位數
#浮點數計算不精確但很快，另有BigDecimal可正確計算(較慢，JDBC會教)

## 基本資料類型 (字元及布林)
| 名稱 | Bytes | 科學記號 | 初值 | 說明 |
| -------- | -------- | -------- | -------- | -------- |
| char     | 2     | 0~2^16^-1 |\u0000     | Java內部計算用UTF-16     |
| boolean     | 1 bit     | true(1),false(0)     |false     |      |

## 條件運算(boolean)
|  | 說明 |  
| -------- | -------- | 
| && | 交集，左邊為False就不計算了(結果為False)。 |
| \|\| | 聯集，左邊為True就不計算了(結果為True)。 |
| \! | 反布林值 |
| \& |交集，但兩邊都會運算。  |
| \| | 聯集，但兩邊都會運算。 |
| \^ | 兩側相反為True。 |

## 位元運算子(0 or 1)
|  | 說明 |  
| -------- | -------- | 
| \& | 兩邊都1,結果為1。  |
| \| | 一邊為1,結果為1。  |
| \^ | 兩邊分別為0,1則1。 |
| \~ | 0,1互換。 |

#實例:
律師1,醫師2,教師4,工程師8
數字5職業為0101=0001|0100是律師也是老師

## 三元運算(A?B:C)
```
A為Boolean
B為True result
C為False result
```

翻譯:
A是否為真? 是則B，否則C。

## 遞增、遞減運算
System.out.println((a++)+" "+a);
System.out.println(a);
Result:10 11
Result:11
在同個指令內，後面的a被加1了，出去指令還是一樣。

##