CodeGym /Kursus Java /Java Multithreading /Nombor (Integer, Panjang, Bait)

Nombor (Integer, Panjang, Bait)

Java Multithreading
Tahap , pelajaran
Tersedia

"Memandangkan pembangun boleh menghasilkan kelas yang menerangkan nombor, mereka memutuskan untuk menjadi kreatif, seperti pembangun sebenar."

"Pertama, mereka menghasilkan kelas Nombor abstrak, dari mana Byte, Short, Integer, Long, Float dan Double diperolehi. Ia mempunyai kaedah yang membantu menukar nombor kepada jenis angka lain."

Kaedah kelas Nombor
1
int intValue()
2
long longValue()
3
float floatValue()
4
double doubleValue()
5
byte byteValue()
6
short shortValue()

"Betul. Lagipun, anda tidak boleh menulis ini:"

Long x = 100000;
Integer y = (Integer) x;

"Ya, jenis ini bukan primitif. Itulah sebabnya kami menggunakan kaedah kelas Nombor:"

Long x = 100000;
Integer y = x.intValue();

"Tetapi masih terdapat beberapa perkara yang perlu dipertimbangkan. Oleh kerana Integer bukan int, objek Integer tidak boleh dibandingkan dengan operator «==» klasik."

Membandingkan jenis primitif
int x = 500;
int y = 500;
x == y; //true
Membandingkan jenis bukan primitif
Integer x = 500;
Integer y = 500;
x == y; //false
x.equals(y); //true

"Betul. Entah kenapa saya tak terfikir langsung."

"Tetapi ada lagi."

"Kamu memendekkan litar saya! Apa lagi yang ada?"

"Apabila kami memberikan nilai int kepada pembolehubah Integer, kaedah Integer.valueOf dipanggil:"

Kod Apa sebenarnya yang berlaku
Integer x = 5;
Integer x = Integer.valueOf(5);

"Ya, saya sudah faham itu daripada contoh di atas."

"Tetapi, fungsi valueOf tidak selalu mencipta objek Integer baharu."

"Eh, apa maksud awak «bukan selalu»?"

"Ia menyimpan nilai dari -128 hingga 127."

Kod Apa sebenarnya yang berlaku Penerangan
Integer x = 300;
Integer y = 300;
Integer z = 300;
Integer x = Integer.valueOf(300);
Integer y = Integer.valueOf(300);
Integer z = Integer.valueOf(300);
Pembolehubah x, y dan z mengandungi rujukan kepada objek yang berbeza
Integer x = 100;
Integer y = 100;
Integer z = 100;
Integer x = Integer.valueOf(100);
Integer y = Integer.valueOf(100);
Integer z = Integer.valueOf(100);
Pembolehubah x, y dan z mengandungi rujukan kepada objek yang sama.
Integer x = new Integer(10)
Integer y = new Integer(10)
Integer z = 10;
Integer t = 10;
Integer x = new Integer(10)
Integer y = new Integer(10)
Integer z = Integer.valueOf(10);
Integer t = Integer.valueOf(10);
Pembolehubah z dan t mengandungi rujukan kepada objek yang sama.

"Dengan kata lain, keadaannya begini:"

1)  Jika kami menulis «new Integer()», maka kami dijamin mendapat objek baharu.

2)  Jika kita memanggil Integer.valueOf(), secara eksplisit atau melalui autoboxing, maka kaedah itu boleh mengembalikan objek baharu atau objek cache jika hujah nombor berada dalam julat dari -128 hingga 127.

"Apa yang teruk tentang kaedah mengembalikan objek daripada cache?"

"Tidak mengapa. Anda hanya perlu tahu bahawa kadangkala, apabila anda tidak menjangkakannya, objek mungkin sama. Segala-galanya dengan kesamaan adalah rumit. Jika kita membandingkan primitif dengan bukan primitif, maka ia dibandingkan sebagai primitif:"

Masalah perbandingan
int x = 300;
Integer y = 300;
Integer z = 300;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //false (comparison based on references)
Contoh yang lebih menarik. Cache memasuki gambar di sini
int x = 100;
Integer y = 100;
Integer z = 100;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //true (comparison based on references; they point to the same object)
Tetapi cache tidak terlibat di sini
int x = 100;
Integer y = new Integer(100);
Integer z = 100;

x == y; //true (comparison based on primitive value)
x == z; //true (comparison based on primitive value)
y == z; //false (comparison based on references; they point to different objects)

"Hebat... Dan bagaimana saya akan menghafal semua ini?"

"Anda tidak perlu menghafal ini. Anda hanya perlu memahami bagaimana ini semua diatur dan apa yang sebenarnya berlaku apabila primitif dan rakan sejawatannya yang bukan primitif terlibat."

"Saya juga mengesyorkan agar anda melihat kaedah kelas Integer. Ia mempunyai beberapa kaedah yang baik dan berguna. Malah anda telah menggunakan salah satu daripadanya dengan kerap."

"Ya, saya ingat. Integer.parseInt();"

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION