iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

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

JAVA 資料型別 (Data Type) 類型

  • 分享至 

  • xImage
  •  

今天來整理一下 Java 資料型別,在 Java 中資料型別可以分為兩種:

  1. Primitive Data Types (原始資料型別)
  2. Non-Primitive Data Types(參考資料型態)

Primitive Data Types

為 Java 內建(預先定義好的)的資料型別,並已保留關鍵字命名,一共有 8 種類型,包含:byteshortintlongfloatdoubleboolean 與 char

這裡要來稍微討論的深入一點,primitive data type 具有 copy by value 的特性,一般來說當宣告一個變數時,電腦會將變數的值實際儲存到記憶體某個位置中。而當把 primitive data type 的變數指定給另一個變數時,新的變數會在記憶體中另找一個新的位置存放。

因此,如果我們針對變數 b 進行任意的變動,像是重新指派新的值等等,皆無法對變數 a 產生影響,看不懂這段敘述沒關係,下面來看一下圖解與範例程式碼:

https://ithelp.ithome.com.tw/upload/images/20230918/20162254XRnV1cnctx.png

// copy by value 

// 宣告變數 a
	
	int a = 10; 
	// 在此變數 a 會存放在記憶體的某個位置, 這裡假設為記憶體位置 x

// 指定 a 給變數 b
		
	int b = a;
	// 當把 a 指定給變數 b 時,這時因為 int 為 primitive data type 的資料型別,
	// 所以,變數 b 會另外儲存在記憶體位置 y

// 修改變數 b, 不會影響到 a
	
	b = 100;
	System.out.println("value of a: " + a);
	System.out.println("value of b: " + b);

    // Out: value of a: 10
    // Out: value of b: 100
    

接下來討論 Non-Primitive Data Types 參考資料型態。

Non-Primitive Data Types

Non-Primitive Data Types 又稱作 referenced data type ,除了 String 是 Java 原生定義的之外,其他都是第三方使用者創建出來的物件,所以自己於 Java 中建立的物件也都會屬於 Non-Primitive Data Types ,常見的物件型別有 String, Array, ArrayList, Object...等等。

而為何被稱作 referenced data type,是因為其具有 copy by reference 的特性,當把 non-primitive data type 的變數指定給另一個變數時,新的變數會產生一個標籤指向原變數記憶體儲存的位址;而不會實際產生一個新的值存放在記憶體之中,也就是說如果對新變數變動會直接影響到原來的變數,範例示範如下:

https://ithelp.ithome.com.tw/upload/images/20230918/20162254R8HMUKzMsQ.png

// copy by reference

// 宣告變數 a
	
	String a = '10'; 
	// 在此變數 a 會存放在記憶體的某個位置, 這裡假設記憶體位置 x

// 指定 a 給變數 b
		
	String b = a;
	// 當把 a 指定給變數 b 時,這時因為 String 為 non-primitive data type 的資料型別,
	// 所以,變數 b 會產生標籤指向記憶體位置 x

// 修改變數 b, 會直接影響到 a 的值
	
	b = '100';
	System.out.println("value of a: " + a);
	System.out.println("value of b: " + b);

    // Out: value of a: 100
    // Out: value of b: 100

上一篇
Java 資料型別的特性
下一篇
Primitive 與 Non-Primitive Data Types 的比較
系列文
轉職仔自學Java筆記本22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言