Rumah pembangunan bahagian belakang Tutorial C#.Net C# 中的 == 和 equals()区别

C# 中的 == 和 equals()区别

Dec 16, 2016 am 09:47 AM
equals()

如以下代码:

int age = 25;
 
short newAge = 25;
 
Console.WriteLine(age == newAge);  //true
 
Console.WriteLine(newAge.Equals(age)); //false
 
Console.ReadLine();
Salin selepas log masuk

int和short为原始类型,但与“==”比较返回true,equals()比较返回false。为什么呢?

Answers:

简而言之:

“equals()”相比“= =”复杂。

具体来说:
原始类型覆盖(override)基类的object.Equals(object),并且当括弧中的object与其类型和值相同时返回true (注意Nullable类型也适合上述判断;非空Nullable类型总是装箱到一个基础类型实例)。

由于newAge是short,因此在object是short且值与newAge值相等时,newAge.Equals(object)返回true。你传递的是一个int对象,所以它返回false。

相比之下,“= =”运算符被定义为带两个整形(int)或两个短整型(short)或两个长整形(long)的运算。当“= =”两个参数一个是整形和一个短整型时,编译器会隐式转换short为int,并比较转换后int值大小。

使其工作其他方法:

原始类型也有自己的equals()方法,equals接受相同的类型的参数。

如果你写age.Equals(newAge),编译器将选择int.Equals(int)作为最好的重载(overload)方法且隐式转换short为int。然后,它会返回true,因为这种方法直接比较两个int值大小。

short也有一个short.Equals(short)方法,但是int类型不能隐式转换为short,所以就不会调用它。

你可以使用cast转换强制调用这个方法:

Console.Writeline(newAge.Equals((short)age)); //true
Salin selepas log masuk

这将直接调用short.Equals(short),没有装箱操作。如果age大于32767,它会抛出一个溢出异常。

你也可调用short.Equals(object)这个重载,但需要明确地传递一个经过装箱的具有相同类型的对象:

Console.WriteLine(newAge.Equals((object)(short)age)); // true
Salin selepas log masuk

像前面可选方法(short.Equals(short))一样,如果大小超过short范围,同样抛出一个溢出异常。不同于以往的解决方案,它将short装箱成一个object——浪费time和memory。

Source Code:

这里是实际中使用的Equals():

 public override bool Equals(Object obj) {
 
        if (!(obj is Int16)) {
 
            return false;
 
        }
 
        return m_value == ((Int16)obj).m_value;
 
    }
 
    public bool Equals(Int16 obj)
 
    {
 
        return m_value == obj;
 
    }
Salin selepas log masuk




更多C# 中的 == 和 equals()区别相关文章请关注PHP中文网!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah alternatif untuk membatalkan bahasa C Apakah alternatif untuk membatalkan bahasa C Mar 03, 2025 pm 05:37 PM

Artikel ini meneroka cabaran penentuan penunjuk null dalam C. Ia berpendapat bahawa masalah itu tidak batal sendiri, tetapi penyalahgunaannya. Artikel ini memperincikan amalan terbaik untuk mencegah dereferensi, termasuk pemeriksaan pra-pengertian, penunjuk inisial

Cara menambah pengkompil C peringkat seterusnya Cara menambah pengkompil C peringkat seterusnya Mar 03, 2025 pm 05:44 PM

Artikel ini menerangkan cara membuat aksara baru dalam C menggunakan urutan \ n Escape dalam Printf dan meletakkan fungsi. Ia memperincikan fungsi dan menyediakan contoh kod yang menunjukkan penggunaannya untuk pecah talian dalam output.

Penyusun bahasa C mana yang lebih baik? Penyusun bahasa C mana yang lebih baik? Mar 03, 2025 pm 05:39 PM

Artikel ini membimbing pemula untuk memilih pengkompil C. Ia berpendapat bahawa GCC, kerana kemudahan penggunaannya, ketersediaan yang luas, dan sumber yang luas, adalah yang terbaik untuk pemula. Walau bagaimanapun, ia juga membandingkan GCC, Clang, MSVC, dan TCC, yang menonjolkan perbezaan mereka

Adakah Null masih penting dalam pengaturcaraan moden dalam bahasa C? Adakah Null masih penting dalam pengaturcaraan moden dalam bahasa C? Mar 03, 2025 pm 05:35 PM

Artikel ini menekankan kepentingan berterusan null dalam pengaturcaraan C moden. Walaupun kemajuan, null tetap penting untuk pengurusan penunjuk yang jelas, mencegah kesalahan segmentasi dengan menandakan ketiadaan alamat memori yang sah. Prac terbaik

Apakah versi web penyusun bahasa C? Apakah versi web penyusun bahasa C? Mar 03, 2025 pm 05:42 PM

Artikel ini mengkaji semula penyusun dalam talian untuk pemula, memberi tumpuan kepada kemudahan penggunaan dan keupayaan debug. Onlineegdb dan Repl.It diserlahkan untuk antara muka mesra pengguna dan alat debugging yang berguna. Pilihan lain seperti programz dan penyusunan

C Laman Web Pengaturcaraan Dalam Talian C Ringkasan Laman Web Rasmi C Laman Web Pengaturcaraan Dalam Talian C Ringkasan Laman Web Rasmi Mar 03, 2025 pm 05:41 PM

Artikel ini membandingkan platform pengaturcaraan dalam talian C, menonjolkan perbezaan ciri -ciri seperti alat debugging, fungsi IDE, pematuhan standard, dan had memori/pelaksanaan. Ia berpendapat bahawa platform "terbaik" bergantung kepada keperluan pengguna,

Kaedah Penyalinan Kod oleh Compiler Bahasa C Kaedah Penyalinan Kod oleh Compiler Bahasa C Mar 03, 2025 pm 05:43 PM

Artikel ini membincangkan penyalinan kod yang efisien dalam c ides. Ia menekankan bahawa penyalinan adalah fungsi IDE, bukan ciri pengkompil, dan strategi butiran untuk kecekapan yang lebih baik, termasuk menggunakan alat pemilihan IDE, lipatan kod, carian/menggantikan, templa

Cara menyelesaikan masalah tidak muncul tetingkap output oleh pengkompil bahasa C Cara menyelesaikan masalah tidak muncul tetingkap output oleh pengkompil bahasa C Mar 03, 2025 pm 05:40 PM

Artikel ini menyelesaikan masalah tingkap output yang hilang dalam kompilasi program C. Ia meneliti sebab -sebab seperti gagal menjalankan kesilapan, kesilapan program, tetapan penyusun yang salah, proses latar belakang, dan penamatan program yang cepat. Penyelesaian melibatkan ch

See all articles