---
tags: Java
---
# 變數、運算子

## Primitive(基本型別有八種): 資料數值(0是正數/1是負數)
* a. byte : 佔8bits (-128 ~ +127 = 256)
* b. short : 16bits (-32768 ~ +32767 = 65536)
* c. int: 32bits, 整數的預設型別,在java中若5/2=2把小數點無條件捨去
* d. Long:64bits
* e. float: 32bits
* f. double: 64bits, 一般有小數點的值預設都是double
* g. 字元 char: 16bits (0 ~ 65535) \u0000 ~ \uffff 用於難直接輸入的字元,可參考unicode表(https://www.tamasoft.co.jp/en/general-info/unicode.html),會對應到一些特殊符號,最基本的像\u0041是A。
* h. 邏輯 boolean: true / false, 預設是false 跟JS不同的是不能用0跟1代替。
> 補充: instanceof: 回傳布林值,用於判斷類別間的繼承關係,若物件跟類別沒有繼承關係會出現complier error, 不可用在基本型別的判斷,用null instanceof object 會回傳false。
## Reference(參考型別): 物件
* 類別
* Array
#### 資料傳遞
Pass By Value
* Privative: 基本型別在做資料傳遞不會改變到原本的值,會指向記憶體不同位置。
Pass By Reference
* Reference: 參考型別傳值會指向記憶體同一個位置,但new 參考型別傳值會指向記憶體不同位置。
### Q: 文字切割A1B12CD,EFG45HI, 使用String.?(), 可以用Scanner, 簡單的可以從A,B,CD,EFG,HI去切割。
方法一: split
```
String complexStr = "AB12CD,EFG45HI";
String[] newComplexStrs = complexStr.split("\\,|\\.|[0-9]");
for(String newComplexStr: newComplexStrs){
System.out.print(newComplexStr + ""); }
```
方法二: StringTokenizer
```
StringTokenizer st = new StringTokenizer(userkey , ".-,@0123456789");
while (st.hasMoreTokens()) {
System.out.print( (st.nextToken()).toUpperCase());
}
System.out.println("");
}
```
## 運算子
運算元的數量: a.單元 b. 二元(多) c. 三元(?)
允許的型別: byte、short、char是不能直接參與運算,需先轉成int型別
運算元間必須能轉型
* 七種基本型別無法跟boolean去做轉型
* 基本跟參考型別無法互相轉型
運算結果: 不同型別做運算,以位元數大的去當型別 ,整數的最小型別是int
### Q: 1.使用Scanner 2.min~max之間取亂數(會有轉型整數) 3.猜數字, 使用者輸入數字若符合亂數答案則答對(判斷)4.只允許猜三次。
先產生一隨機的數字,再用for迴圈去跑
```
int gameNum = (int)(Math.random()*99 + 1) ;
```
## this 與 this() 與 super()
this : 如`this.name = name`指調用此函數物件,通常是指區域變數賦值給成員變數。
this() : 呼叫同一類別內的其他建構式。
super() : 從子類別呼叫父類別的建構式。
補充: this()跟super()都必須寫在建構式的第一行,兩者不能共存,另外當建構子有Overloading時,會根據括號內的參數個數去判斷要使用哪個建構子。
> [name=Luke] [time=Sun, Jan 12, 2020] [color=#907bf7]