Pointers (ตัวชี้) ใน C/C++
Pointer คือ ตัวแปรที่เก็บที่อยู่ในหน่วยความจำ (memory address) ของตัวแปรอีกตัวหนึ่ง
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int i = 8; // ตัวแปร int
int *pI; // ตัวแปร pointer
pI = &i; // กำหนด address ของ i ให้ pI
cout << i << endl; // พิมพ์ค่า: 8
cout << pI << endl; // พิมพ์ address: 0x7fee1ae7bc94
cout << *pI << endl; // พิมพ์ค่าที่ pI ชี้: 8
*pI = 10; // เปลี่ยนค่าผ่าน pointer
cout << i << endl; // พิมพ์ค่าใหม่: 10
}
ผลลัพธ์
8 0x7fee1ae7bc94 8 10
References (อ้างอิง) ใน Java
Reference ใน Java คือ ตัวแปรที่อ้างอิงถึงออบเจ็กต์ (object) ใช้เข้าถึง property และ method ของออบเจ็กต์นั้น
ตัวอย่าง
public class Tester {
public static void main(String[] args) {
Student student = new Student();
student.setName("Mahesh");
System.out.println(student.getName());
}
}
class Student {
String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
ผลลัพธ์
Mahesh
ความแตกต่างหลักระหว่าง Pointers และ References
- No Pointer Arithmetic in Java: ใน C/C++ pointer สามารถ ++/-- เพื่อชี้ address ใหม่ได้ แต่ Java ไม่อนุญาต
- No Pointer Manipulation in Java: Java ไม่อนุญาตการจัดการ pointer โดยตรง ทำให้ปลอดภัยกว่า Reference อาจเป็น null หรือชี้ object เท่านั้น
- No Casting of pointers in Java: C/C++ แคสต์
int*เป็นchar*ได้ แต่ Java แคสต์ได้เฉพาะ object ใน hierarchy เดียวกัน