Object.ReferenceEquals(1, 1) = false?

.NET

2 svar · 396 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Trådstart#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.)

373 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
124 ms — deklarationer (db)
119 ms — hämta statistik (db)
126 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)