---
# System prepended metadata

title: 變數之一 - 宣告
tags: [java, article index, tutorial article, teaching, declaration, variable]

---

```java
/*
 *  宣告一個變數, 格式為： 
 * 
 *  類別/形態 名稱(可自定義) = 值; (分號結尾)
 *  
 *  舉例來說：
 *  String   str = "123";   //字串需要用雙引號括起來
 *  double   dou = 123.45;
 *  int      num = 456;
 */
public class ExampleVariable1 {

    public static void main(String[] args) {

        // 類別/形態 String, 名稱 str, 值 "123", 分號結尾;
        String str = "123"; 
        
        // 類別/形態 int, 名稱 number, 值 123, 分號結尾;
        int number = 123; 
        
        // 類別/形態 double, 名稱 doubleNum, 值 5.2, 分號結尾;
        double doubleNum = 5.2; 

        String str;
        //System.out.println(str); 
        //這邊會報錯誤，因為區域變數沒有賦值無法被印出

        /*
         * 變數名稱除了『保留關鍵字』以外，都可以隨意取，
         * （本頁最下方有保留關鍵字的解說連結）
         * 但如果會重複使用變數時，最好是取有意義的名稱。
         * 
         * 值與值之間可以使用 + 拼湊。另外，任何值與字串拼湊起來後都會變成字串。
         */
        
        // 字串跟數字合併了，印出 123123
        System.out.println(str + number);
        
        // 因為兩個都是數字，會相加，所以印出 246
        System.out.println(number + number);

        // null 跟字串拼湊，會變成內容是 null 的字串
        System.out.println(null + "");

        // 布林值 true 跟字串拼湊，會變成內容是 true 的字串 (false 亦同)
        boolean bool = true;
        System.out.println(bool + "");
        
        /*
         * 同樣的變數名稱，不可以帶著形態重複宣告，會產生錯誤。
         *
         * 我們可以先這樣簡單理解重複宣告這件事情。
         * 當使用者創建一個變數後（不管有沒有賦值），這個變數就會產生記憶體位置。
         *
         * 而變數的名字，就是用來快速找到存儲在記憶體中的變數內容的關鍵。
         * 當您重新賦值變數時，您實際上是通過這個名字找到該內容並修改它，
         * 而不是創建一個新的變數。
         *
         * 但如果您試圖重新聲明一個已經存在的變數，編譯器會報錯，
         * 這是因為變數名稱是用來標識存儲在記憶體中的特定位置的唯一識別。
         * 如果您試圖使用相同的名稱創建一個新的變數，
         * 程式就無法判斷這個名稱應該指向哪個記憶體位置，因此就會報錯。
         */

        int mynumber = 456;
        //int mynumber = 456;    //這邊會報錯誤，因為變數名稱重複宣告了
        
        int myNumber = 567;      //正常宣告，因大小寫不同就視為另一個變數
        System.out.println(mynumber); // 印出 456

        mynumber = 789;          // 若直接覆蓋原來的值, 也是可以的
        System.out.println(mynumber); // 印出 789

        /*
         *  字串同理，被覆蓋後會變成新的值。
         *  
         *  不過系統對於字串處理有一套特殊規則，
         *  目前可以先暫時理解成一樣的狀況。
         * 
         *  或者可以看變數之六的解說。
         */
        String myStr = "999";
        myStr = "abc";
        System.out.println(myStr); // 印出 abc

        doubleNum = 9.9;
        System.out.println(doubleNum); // 印出9.9

        //另外 double 也可以這樣表示，雖然實務上這些語法不太會使用
        double d1 = 7D;
        double d2 = 7.;
        double d3 = 8.0;
        double d4 = 8.D;

        int bigNumber = 1234567890;
        System.out.println(bigNumber);

        // 如果數字位數太長時，可以用底線隔開方便閱讀，不過實務上亦不常使用
        int bigNumber2 = 123_456_789_0;
        // bigNumber2印出來時，底線會消失
        System.out.println(bigNumber2);

        //跟相等的數字作比較，結果也正常，會印出 true
        System.out.println(bigNumber == bigNumber2);

        //布林值如果加上驚嘆號後，就會反轉結果
        boolean bool = true;
        System.out.println(bool);    //印出 true
        System.out.println(!bool);    //印出 false
    }
}
```
* [保留關鍵字](https://pydoing.blogspot.com/2010/10/java-keyword.html)
* [各種命名習慣](https://matthung0807.blogspot.com/2019/05/java-naming-convention.html)
