Tipe Nilai vs Tipe Referensi
Lihat cara masing-masing disimpan dan disalin.
Tipe Nilai vs Tipe Referensi adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Dua Kelompok Tipe
Tipe C# terbagi menjadi tipe nilai (int, double, bool, struct) dan tipe referensi (kelas, string, larik). Keduanya berbeda dalam cara penyimpanan dan penyalinannya.
using System;
class Program
{
static void Main()
{
int valueType = 5; // value type
int[] referenceType = { 1, 2, 3 }; // reference type
Console.WriteLine(valueType + ", length " + referenceType.Length);
}
}Tipe Nilai Menyimpan Data
Variabel bertipe nilai berisi datanya secara langsung. Biasanya data ini berada di tumpukan atau disimpan langsung di dalam objek yang memuatnya.
using System;
class Program
{
static void Main()
{
int a = 10;
double b = 3.14;
bool c = true;
Console.WriteLine(a + ", " + b + ", " + c);
}
}Tipe Referensi Menyimpan Alamat
Variabel bertipe referensi menyimpan referensi (alamat) ke data yang tersimpan di heap. Variabel dan objek tersebut merupakan dua hal yang terpisah.
using System;
class Box { public int Value; }
class Program
{
static void Main()
{
Box b = new Box(); // b refers to a heap object
b.Value = 42;
Console.WriteLine(b.Value);
}
}Semantik Penyalinan: Tipe Nilai
Menetapkan tipe nilai menyalin data. Mengubah salinan tidak pernah memengaruhi nilai asli.
using System;
class Program
{
static void Main()
{
int a = 1;
int b = a; // copy
b = 99;
Console.WriteLine("a=" + a + ", b=" + b);
}
}Semantik Penyalinan: Jenis Referensi
Menetapkan jenis referensi akan menyalin referensi, bukan objeknya. Kedua variabel kemudian menunjuk ke objek yang sama.
using System;
class Box { public int Value; }
class Program
{
static void Main()
{
Box a = new Box { Value = 1 };
Box b = a; // same object
b.Value = 99;
Console.WriteLine("a.Value=" + a.Value + ", b.Value=" + b.Value);
}
}Struktur Adalah Jenis Nilai
struct yang Anda definisikan adalah jenis nilai, sehingga akan disalin saat penugasan seperti int.
using System;
struct Point { public int X, Y; }
class Program
{
static void Main()
{
Point p1 = new Point { X = 1, Y = 2 };
Point p2 = p1; // full copy
p2.X = 99;
Console.WriteLine("p1.X=" + p1.X + ", p2.X=" + p2.X);
}
}Meneruskan ke Metode
Secara bawaan, jenis nilai diteruskan melalui salinan, sedangkan jenis referensi meneruskan salinan referensinya. Jadi, metode dapat mengubah objek kelas yang terlihat oleh pemanggil, tetapi tidak dapat mengubah int biasa.
using System;
class Counter { public int N; }
class Program
{
static void BumpInt(int x) { x++; }
static void BumpObj(Counter c) { c.N++; }
static void Main()
{
int i = 0;
BumpInt(i);
var c = new Counter();
BumpObj(c);
Console.WriteLine("i=" + i + ", c.N=" + c.N);
}
}Ketiadaan dan Jenis Referensi
Hanya jenis referensi yang dapat bernilai null (ketiadaan objek). Jenis nilai selalu menyimpan suatu nilai, kecuali dideklarasikan dapat bernilai kosong dengan ?.
using System;
class Program
{
static void Main()
{
string text = null; // reference type can be null
int? maybe = null; // nullable value type
Console.WriteLine((text == null) + ", " + (maybe == null));
}
}Perbedaan Kesetaraan
Untuk jenis nilai, == membandingkan datanya. Untuk jenis referensi, == biasanya membandingkan identitas (objek yang sama), kecuali perilakunya ditimpa.
using System;
class Program
{
static void Main()
{
int a = 5, b = 5;
Console.WriteLine("ints: " + (a == b)); // True - same value
object o1 = new object();
object o2 = new object();
Console.WriteLine("objects: " + (o1 == o2)); // False - different identity
}
}Nilai Bawaan
Jenis nilai memiliki nilai bawaan yang menyerupai nol (0, false), sedangkan jenis referensi secara bawaan bernilai null.
using System;
class Program
{
static void Main()
{
int defaultInt = default;
bool defaultBool = default;
string defaultString = default;
Console.WriteLine(defaultInt + ", " + defaultBool + ", null? " + (defaultString == null));
}
}Merangkum Semuanya
Dengan mengetahui apakah suatu jenis merupakan jenis nilai atau jenis referensi, Anda dapat memprediksi perilaku penyalinan, kemampuan bernilai kosong, dan cara metode dapat mengubahnya. Hal ini membantu membentuk kode yang benar dan bebas kesalahan.
using System;
struct Money { public decimal Amount; }
class Wallet { public decimal Amount; }
class Program
{
static void Main()
{
Money m1 = new Money { Amount = 10 };
Money m2 = m1; m2.Amount = 99;
Wallet w1 = new Wallet { Amount = 10 };
Wallet w2 = w1; w2.Amount = 99;
Console.WriteLine("Money copy: " + m1.Amount + " (independent)");
Console.WriteLine("Wallet ref: " + w1.Amount + " (shared)");
}
}Pemeriksaan Singkat
Uji pemahaman Anda tentang jenis nilai dan jenis referensi.
Ringkasan
Jenis nilai (int, bilangan desimal, boolean, struktur) menyimpan data secara langsung dan disalin saat penugasan; jenis referensi (kelas, teks, larik) menyimpan referensi ke objek di memori tumpukan dan menyalin referensi tersebut. Secara bawaan, hanya jenis referensi yang dapat bernilai kosong, dan perilaku penugasan serta kesetaraan berbeda antara kedua kelompok tersebut.
using System;
struct V { public int N; }
class R { public int N; }
class Program
{
static void Main()
{
V v1 = new V { N = 1 }; V v2 = v1; v2.N = 9;
R r1 = new R { N = 1 }; R r2 = r1; r2.N = 9;
Console.WriteLine(v1.N + " vs " + r1.N);
}
}Pertanyaan yang Sering Diajukan
Apakah pelajaran “Tipe Nilai vs Tipe Referensi” gratis?
Ya — teks lengkap “Tipe Nilai vs Tipe Referensi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Tipe Nilai vs Tipe Referensi”?
Lihat cara masing-masing disimpan dan disalin. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Tipe Nilai vs Tipe Referensi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Tipe Nilai vs Tipe Referensi
- Boxing dan Unboxing
- Konversi Implisit dan Eksplisit
- Kelas Convert dan Parsing