webForumDet fria alternativet

Object.ReferenceEquals(1, 1) = false?

2 svar · 390 visningar · startad av Travoni

TravoniMedlem sedan okt. 20041 538 inlägg
#1

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

men...

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

TravoniMedlem sedan okt. 20041 538 inlägg
#2

Object.Equals() verkar fungera som önskat.

spangoMedlem sedan juni 20006 147 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.)

252 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
121 ms — hämta statistik (db)
128 ms — hämta forumlista (db)
128 ms — hämta tråd, inlägg och bilagor (db)