webForumDet fria alternativet

Object.ReferenceEquals(1, 1) = false?

.NET

2 svar · 390 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Object.ReferenceEquals("1", "1").ToString
är sant.

men...

Object.ReferenceEquals(1, 1).ToString
är falskt, varför?

Medlem sedan okt. 20041 556 inlägg
#2

Object.Equals() verkar fungera som önskat.

Medlem sedan juni 20008 205 inlägg
#3

Anledningen är att ReferenceEquals tar emot två objekt, och Int32 är en värdetyp vilket innebär att dina intar måste boxas, dvs slås in i ett objekt, innan de kan skickas som argument till ReferenceEquals. Ditt lilla experiment visar att uppenbarligen skapas två olika omslagsobjekt. (Strängar, däremot, poolas när det finns flera likadana, därför funkar det första anropet.)

269 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)