Is empty array null?

Steven Schveighoffer schveiguy at yahoo.com
Mon Mar 5 07:31:34 PST 2012


On Tue, 28 Feb 2012 03:30:01 -0500, Mikael Lindsten <mikael at lindsten.net>  
wrote:

> 2012/2/28 Pedro Lacerda <pslacerda at gmail.com>
>
>> So are a newly allocated array and a null one just the same thing?
>>
>>     int[] a = [], b = null;
>>     assert(a == b);
>>     assert(a.length == b.length);
>>     assert(a.ptr == a.ptr);
>>
>>
> Hi all,
>
> Sorry if this is a stupid question - I'm new to D but I've been keeping  
> an
> eye on it for quite a while (and also read the book).
>
> Coming from the Java/C# world, not distinguishing between an empty array
> and null feels strange to me. Is this so for strings as well? ...and in
> Pedros example, if you assign null to b and then try to access b.length,
> don't you get a NullPointerException? What am I missing?

There is a major difference between Java/C# arrays and D arrays.  The  
former are full-fledged objects, D is just a pointer + length.

In any case, a null array is an array which points at null and has 0  
elements.  Given it has no valid elements, it's a perfectly valid empty  
array.  As demonstrated by this code:

int[] arr = null;
arr ~= 5; // append element works, even though arr originally pointed at  
null.

Do the same in C#/Java and you will get an exception.

D makes arrays as safe as possible, and as useful as possible.  The  
pointer value itself is an implementation detail, and should rarely be  
used to determine logic.

-Steve


More information about the Digitalmars-d-learn mailing list