© Khmer Angkor Academy - sophearithput168

ប្រភេទទិន្នន័យ

Data Types (ប្រភេទទិន្នន័យ) ក្នុង Java

🗂️ Data Type គឺជាអ្វី?

Data Type កំណត់ប្រភេទនៃទិន្នន័យដែល variable អាចរក្សាទុក និង ទំហំ memory ដែលត្រូវការ។

ឧទាហរណ៍ជីវិតពិត:

  • ប្រអប់តូច: ដាក់តែលេខតូចៗ (int)
  • ប្រអប់ធំ: ដាក់លេខធំៗ (long)
  • ប្រអប់អក្សរ: ដាក់អក្សរ (String)

📊 ពីរប្រភេទធំៗ

ប្រភេទ ពន្យល់ ឧទាហរណ៍ រក្សាទុកនៅ
Primitive ទិន្នន័យមូលដ្ឋាន int, double, boolean Stack memory
Reference ទិន្នន័យស្មុគស្មាញ String, Array, Object Heap memory

🔢 Primitive Types (8 ប្រភេទ)

Type ទំហំ ពេលប្រើ Default ឧទាហរណ៍
byte 1 byte លេខតូចណាស់ 0 -128 ដល់ 127
short 2 bytes លេខតូចមធ្យម 0 -32,768 ដល់ 32,767
int 4 bytes លេខធម្មតា ⭐ 0 -2 billion ដល់ 2 billion
long 8 bytes លេខធំណាស់ 0L ច្រើនណាស់
float 4 bytes ទសភាគ (6-7 digits) 0.0f 3.14f
double 8 bytes ទសភាគ (15 digits) ⭐ 0.0 3.141592653589793
boolean 1 bit true/false false true, false
char 2 bytes តួអក្សរតែមួយ '' 'A', '5', '@'

💡 ជ្រើសរើស Type យ៉ាងដូចម្តេច?

  • int: លេខគត់ធម្មតា (អាយុ, ចំនួន, ពិន្ទុ)
  • long: លេខគត់ធំ (លេខទូរស័ព្ទ, ប្រជាជន)
  • double: លេខទសភាគ (តម្លៃ, ទម្ងន់, កម្ពស់)
  • boolean: ពិត/មិនពិត (status, flags)
  • char: តួអក្សរតែមួយ (ថ្នាក់, ជំរើស)
Java Code
Click "Run" to execute the Java code

🔤 Reference Data Types

📦 Reference Types គឺជាអ្វី?

Reference types រក្សាទុក address/reference ទៅកាន់ទិន្នន័យ មិនមែនទិន្នន័យផ្ទាល់ខ្លួនទេ។

🆚 Primitive vs Reference

លក្ខណៈ Primitive Reference
រក្សាទុក តម្លៃផ្ទាល់ Address/Reference
Memory Stack Heap (object ក្នុង heap)
Default value 0, false, etc. null
Methods គ្មាន មាន methods
ឧទាហរណ៍ int, double, boolean String, Array, Object

🎯 Reference Types ញឹកញាប់:

1. String

String name = "Hello";
String greeting = new String("Hi");

Special: String មាន methods ច្រើន (length(), toUpperCase(), charAt())

2. Arrays

int[] numbers = {1, 2, 3, 4, 5};
String[] names = new String[3];

3. Classes

Scanner scanner = new Scanner(System.in);
ArrayList list = new ArrayList<>();

🧠 Memory ដំណើរការយ៉ាងដូចម្តេច?

// Primitive
int x = 10;  // Stack: x = 10 (តម្លៃផ្ទាល់)

// Reference
String name = "Java";  
// Stack: name = address (ឧ: 0x100)
// Heap: address 0x100 → "Java"

⚠️ null Value

Reference types អាចជា null (គ្មានតម្លៃ)។

String name = null;  // ✅ អាចធ្វើបាន
int age = null;      // ❌ កំហុស - primitives មិនអាច null
Java Code
Click "Run" to execute the Java code

🔄 Type Conversion (ការប្តូរប្រភេទ)

📐 ពីរប្រភេទ Conversion

1️⃣ Implicit Conversion (Widening) - ស្វ័យប្រវត្តិ

ពី type តូច → type ធំ (គ្មានបាត់បង់ទិន្នន័យ)

byte → short → int → long → float → double

int myInt = 100;
double myDouble = myInt;  // ស្វ័យប្រវត្តិ 100.0

2️⃣ Explicit Conversion (Narrowing) - Casting

ពី type ធំ → type តូច (អាចបាត់បង់ទិន្នន័យ)

double myDouble = 9.99;
int myInt = (int) myDouble;  // 9 (បាត់ .99)

📊 Conversion Table

From To ប្រភេទ ឧទាហរណ៍
int double Implicit int x = 10; double y = x;
double int Explicit double x = 9.8; int y = (int)x;
int String Method String.valueOf(123)
String int Method Integer.parseInt("123")

🔢 String ↔ Number Conversion

// String → Number
String numStr = "123";
int num = Integer.parseInt(numStr);      // 123
double price = Double.parseDouble("99.99");  // 99.99

// Number → String
int age = 25;
String ageStr = String.valueOf(age);     // "25"
String ageStr2 = Integer.toString(age);  // "25"
String ageStr3 = "" + age;               // "25" (concatenation)

⚠️ Conversion Errors

// NumberFormatException
String text = "abc";
int num = Integer.parseInt(text);  // ❌ Error!

// Data loss
double price = 99.99;
int rounded = (int) price;  // 99 (បាត់ .99)

💡 Best Practices

  • ប្រើ int សម្រាប់លេខគត់ធម្មតា
  • ប្រើ double សម្រាប់លេខទសភាគ
  • ប្រើ boolean សម្រាប់ true/false
  • ប្រើ String សម្រាប់អក្សរ
  • Casting: ប្រុងប្រយ័ត្ន data loss!
  • Parsing: handle exceptions!
Java Code
Click "Run" to execute the Java code