---
# System prepended metadata

title: 變數、運算子
tags: [Java]

---

---
tags: Java 
---

# 變數、運算子

![](https://i.imgur.com/7iFMr5b.jpg)

## 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]






