2026年9月13日 星期日

C、Java、Python 的變數有何不同?

C、Java、Python 的變數有何不同?從「盒子」與「標籤」開始理解

學習程式設計時,我們常把變數想成「裝資料的盒子」。這個比喻對 C 與 Java 很有幫助,但到了 Python,變數更像是貼在物件上的「名稱標籤」。理解這項差異,就能明白為什麼三種語言的宣告方式不同,也能減少型別轉換、輸入處理及物件操作時的錯誤。

先記住一句話:
C 的變數偏向「有固定型別的記憶體空間」;Java 的變數存放「基本值或物件參考」;Python 的變數則是「指向物件的名稱」。

一、三種語言快速比較

比較項目CJavaPython
型別系統靜態型別靜態型別動態型別
使用前是否寫出型別需要需要通常不需要
同一變數名稱能否改指向不同型別不可以不可以可以
字串字元陣列或字元指標String 物件str 物件
記憶體管理程式設計者負責較多垃圾回收機制自動記憶體管理
常數寫法constfinal慣例使用全大寫名稱

二、變數如何宣告?

C 與 Java 在變數名稱前必須標示型別,編譯器會先檢查資料是否符合規定。

C 語言

int age = 20;
float height = 170.5f;
char grade = 'A';

Java

int age = 20;
double height = 170.5;
String name = "小明";

Python

age = 20
height = 170.5
name = "小明"

Python 不必在變數名稱前寫出型別。當程式執行到指定敘述時,名稱會指向右邊建立的物件。

三、型別可以中途改變嗎?

C 與 Java 的變數一經宣告,型別便固定。以下把整數變數改放字串,編譯時就會出錯。

/* C */
int value = 10;
/* value = "水井村";  型別錯誤 */

// Java
int number = 10;
// number = "水井村";  編譯錯誤

Python 的名稱可以重新指向不同型別的物件:

value = 10
value = "水井村"
value = 3.14
重要觀念:這不是同一個物件由整數「變成」字串,而是名稱 value 依序改指向整數、字串與浮點數物件。

四、用「盒子」與「標籤」理解變數

  • C:像準備一個固定規格的盒子,盒子對應一塊記憶體,只能放適合該型別的資料。
  • Java:基本型別變數像盒子;類別型別變數則保存物件的參考。
  • Python:變數像名稱標籤,標籤可以改貼到另一個物件上。
a = 10
b = a
a = 20

print(a)  # 20
print(b)  # 10

一開始,ab 都指向整數物件 10;執行 a = 20 後,只是讓 a 改指向 20,b 仍然指向 10。

五、基本型別與物件參考

Java 特別區分「基本型別」與「參考型別」。例如 int 直接保存整數值,而 String、陣列及自訂類別的變數保存物件參考。Python 中的整數、浮點數、字串與串列等資料都是物件,變數名稱皆與物件建立關聯。

// Java:一個基本型別、一個物件參考
int score = 90;
String place = "水井村";

# Python:名稱分別指向不同物件
score = 90
place = "水井村"

六、常數的表示方式

/* C */
const double PI = 3.14159;

// Java
final double PI = 3.14159;

# Python:全大寫是一種命名慣例,語法並未禁止修改
PI = 3.14159

C 的 const 與 Java 的 final 可以限制重新指定;Python 通常以全大寫提醒程式設計者「這個值不應任意修改」。

七、型別轉換與除法陷阱

/* C */
double result = (double)5 / 2;

// Java
double result = (double) 5 / 2;

# Python
result = float(5) / 2

在 C 與 Java 中,若兩邊都是整數,5 / 2 會先進行整數除法,結果是 2;只要先把其中一個運算元轉為浮點數,結果才會是 2.5。Python 3 的 / 會得到 2.5,而 // 才是整除。

八、Python 初學者最常遇到的輸入問題

Python 的 input() 所取得的資料一律是字串。若要計算,必須先轉為數值型別。

age = input("請輸入年齡:")
print(type(age))       # <class 'str'>

age = int(age)
print(f"明年是 {age + 1} 歲")

若直接寫成 age + 1,就會變成「字串與整數相加」,Python 因而產生型別錯誤。

九、智慧生活情境範例:環境感測資料

假設系統接收到溫度感測器的資料,三種語言都需要清楚知道資料的型別,才能正確進行判斷、運算與上傳。

# Python 範例
location = "水井村智慧養殖池"
temperature = 28.6
device_count = 7
is_online = True

print(f"場域:{location}")
print(f"水溫:{temperature} °C")
print(f"設備數:{device_count}")
print(f"連線狀態:{is_online}")

其中 location 是字串、temperature 是浮點數、device_count 是整數、is_online 是布林值。即使 Python 不要求事先宣告,程式設計者仍應掌握每項資料的意義與型別。

十、課堂練習

  1. 分別用 C、Java 與 Python 宣告姓名、年齡及身高。
  2. 預測 Python 程式 x = 5; y = x; x = 8 執行後,xy 的結果。
  3. 說明為什麼 input() 取得的年齡不能直接加 1。
  4. 為一個智慧農業情境設計四個變數,至少包含字串、整數、浮點數與布林值。

結語

C 重視記憶體與型別控制,Java兼顧型別安全與物件導向,Python 則以簡潔、動態的名稱綁定提高開發效率。

Python 看似不用宣告型別,並不代表型別不重要。相反地,當資料來自鍵盤、感測器、API 或雲端資料庫時,正確理解型別,正是把資料轉化為智慧生活應用的第一步。

沒有留言:

張貼留言