Re: C# Fundamentals Part 3: ReferenceEquals question
- From: "Willy Denoyette [MVP]" <willy.denoyette@xxxxxxxxxx>
- Date: Sat, 1 Apr 2006 17:03:29 +0200
"Jon Skeet [C# MVP]" <skeet@xxxxxxxxx> wrote in message
news:MPG.1e986b7a7f4b4ec998d01c@xxxxxxxxxxxxxxxxxxxxxxx
| Willy Denoyette [MVP] <willy.denoyette@xxxxxxxxxx> wrote:
| > | It prints "true" - meaning that x and y are references to the same
| > | object, despite them being the results of "new" expressions.
| >
| > Both x and y are initialzed to an empty string (== String.Empty), which
by
| > itself is an interned string. The result is that x and y are references
to
| > the same string object.
|
| Yes - but this is the only time it ever happens. You can't create a
| reference to any other interned string using "new" - and it actually
| violates the spec, which says:
|
| <quote>
| The new operator implies creation of an instance of a type
| </quote>
|
| In this case, no new instance is being created :(
|
Yes, but all String(Char[]) or String(Char*) constructors are special cases,
take a look at the remark clause(s) in the Framework reference guide.
....
If value is a null reference (Nothing in Visual Basic) or contains no
element, an Empty instance is initialized.
....
On the current version of the CLR, it means that:
string x = String.Empty;
string y = new string (new char[]{});
x and y are references to the same string 'object', but:
- no new instances of String.Empty are ever created, and it's references are
not tracked (like x and y in above)
- the object is not GC heap allocated, it's initialized by the CLR and
shared by all AD's in the process,
Willy.
.
- Follow-Ups:
- Re: C# Fundamentals Part 3: ReferenceEquals question
- From: Jon Skeet [C# MVP]
- Re: C# Fundamentals Part 3: ReferenceEquals question
- References:
- Re: C# Fundamentals Part 3: ReferenceEquals question
- From: Jon Skeet [C# MVP]
- Re: C# Fundamentals Part 3: ReferenceEquals question
- From: Willy Denoyette [MVP]
- Re: C# Fundamentals Part 3: ReferenceEquals question
- From: Jon Skeet [C# MVP]
- Re: C# Fundamentals Part 3: ReferenceEquals question
- Prev by Date: Re: implicit cast operator funny-ness
- Next by Date: Re: adding two or more exes in one??
- Previous by thread: Re: C# Fundamentals Part 3: ReferenceEquals question
- Next by thread: Re: C# Fundamentals Part 3: ReferenceEquals question
- Index(es):
Relevant Pages
|