iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

轉職仔自學Java筆記本系列 第 4

Primitive 與 Non-Primitive Data Types 的比較

  • 分享至 

  • xImage
  •  

除了前面討論原始資料型別(Primitive Data Types) 與參考資料型態(Non-Primitive Data Types) 底層存取邏輯上的差異之外,實際使用上兩者還有一些差異特別需要注意。

1. 比較方法

在 Java 中會去比較兩個變數是否相等會使用 comparison operator(==),但 == 在兩種資料型別中比較的對象是不一樣的。

  • 原始資料型別 (Primitive Data Types) 中會比較兩個變數的是否相同
  • 參考資料型態 (Non-Primitive Data Types)中會比較兩個變數存放的記憶體位置是否相同
  // Primitive Data Types
  	int a = 10;
  	int b = 10;
  	
  	System.out.println(a == b) 
  	// Out: true
  	// 兩者的值是相等的
  
  // Non-Primitive Data Types
  	String a = "hello"
  	String b = "hello"
  	
  	System.out.println(a == b) 
  	// Out: false
  	// 兩者參照的記憶體位置是不相同的

那參考資料型態該如何比較值的大小呢?

這時就可以使用物件(Object)的方法,像是比較字串 String 是否相等,可以使用 equals() 的函示來比對。

  // Non-Primitive Data Types
 	String a = "hello"
 	String b = "hello"
 	
 	System.out.println(a.equals(b));
 	// Out: true

2. 預設值

Primitive Data Types 的變數再創建之後會自動賦值;而參考資料型態則不會,若未賦值將會預設為 null。

 // Primitive Data Types
 int a;
 
 System.out.println(a);
 // Out: 0
 // 雖然 int 尚未指定其值,但會預設為 0
 
 // Non-Primitive Data Types 
 String s;
 
 System.out.println(s);
 // Out: null
 // String 未指定值前會為 null, 而非空字串 ""

這點蠻重要的,因為 Java 對資料型別嚴謹的規定,在建立與資料庫連線的 ORM 模型時,都需要特別留意萬一是空值時,不同的資料型別會有不同的值。

以下是 Primitive Data Types 預設值:
資料型別 | 預設值 | | 資料型別 | 預設值
------ | ------- | | ------ | -------
byte | 0 | | float | 0.0F |
short | 0 | | double | 0.0
int | 0 | | boolean | false
long | 0L | | char | ‘\u0000’

  • "\u0000" 是空字串。

3. 辨識原則

最後是分享一個小原則,原始資料型別以小寫字母開頭,而參考資料型態以大寫字母開頭,但其實原始資料型別就只有 8 種,我是直接把八種原始資料型別背起來,其他的都是參考資料型態,這樣最簡單。


上一篇
JAVA 資料型別 (Data Type) 類型
下一篇
整數 (Integer) 與浮點數 (Floating point)
系列文
轉職仔自學Java筆記本22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言