Kezdőoldal » Számítástechnika » Programozás » Több fordítási időben létező...

Több fordítási időben létező stringek miért lesznek ugyanazok a példányok?

Figyelt kérdés

PL:

str1 = "foo";

object str2 = "foo";

Ugyanazt tárolják de két külön string,akkor miért egyezik a referenciájuk?


2016. júl. 23. 21:06
 1/8 A kérdező kommentje:
bool b = str1 == str2; Ez miért lesz true ha referencia összehasonlítás történik? Gondolom mert mind a kettő ugyanarra az objektre mutat de miért?
2016. júl. 23. 21:16
 2/8 A kérdező kommentje:

Nem megy a fejembe ez miért false:

string str1 = "foo";

object str2 = "foobar".Substring(0, 3);

bool b = str1 == str2;

Console.WriteLine(b);

És ez miért true:

string str1 = "foo";

object str2 = "foo";

bool b = str1 == str2;

Console.WriteLine(b);

2016. júl. 23. 21:20
 3/8 anonim ***** válasza:

A fordító fordítási időben elvégzi, hogy azonos string literálokhoz azonos string obejtumok tartozzanak.

A "foobar".Substring(0, 3) esetében a Substring metódushívás visszatérési értékének előállítása (nem fordítási) hanem futási időben történik.

2016. júl. 23. 21:59
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:

Így már fényesen süt a nap adtam zöldet.

Még annyit,hogy mi az a literál?

2016. júl. 23. 22:02
 5/8 A kérdező kommentje:

Mégsem értek pár dolgot.

"A fordító fordítási időben elvégzi, hogy azonos string literálokhoz azonos string obejtumok tartozzanak"

Azonos string objektumok alatt azt érted,hogy van több objektum amik ugyanarra a referenciára mutatnak vagy azt,hogy ezek memóriacímei megegyeznek?

2016. júl. 23. 22:10
 6/8 anonim ***** válasza:

A program szövegében direkt módon beleírt adat a literál.

Pl a 2 is egy literál.

Objektum alatt azt értettem amit objektumorientált programozáson értenek bocs nem voltam egyértelmű. Az hogy van object nevű típus az nem számít ebben az értelemben ahogy értettem.

2016. júl. 23. 22:40
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

C#-ban (Java-val ellentétben) == String esetén Equals-t hívja, tehát nem referenciákat hasonlítasz össze, hanem tartalmat. Ha referenciák alapján akarsz összehasonlítani két stringet, akkor a ReferenceEquals-t használd. Ettől függetlenül, igazad van abban, hogy a literál stringek ("ami idézőjelek között szerepel a kódban") referenciája megegyezik, mivel a CLR ezeket összerendeli (String interning).

Ami cifrává teszi a dolgokat az az "object-esített" stringgel végzett compare. Mert ebben az esetben az object Equals-a hívódik meg, amely alapértelmezetten a ReferenceEquals-t hívja meg.


Tanács: ha érték szerint akarsz összehasonlítani, végezd az Equals-szal.

2016. júl. 23. 22:49
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

"Tanács: ha érték szerint akarsz összehasonlítani, végezd az Equals-szal."

Bullshit.

Használjon nyugodtan ==-t, ugyanúgy érték szerint hasonlít össze, de cserébe sokkal olvashatóbb.

2016. júl. 24. 09:23
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!