Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!news.ripco.com!news-out.news.tds.net!newsreading01.news.tds.net!53ab2750!not-for-mail From: "Jim Gibson" Subject: Re: automatically initialized to null? Message-ID: <5023FE3E.56493.calajapr@time.synchro.net> X-Comment-To: Lew Newsgroups: comp.lang.java.programmer In-Reply-To: <5023FE3E.56492.calajapr@time.synchro.net> References: <5023FE3E.56492.calajapr@time.synchro.net> X-FTN-AREA: COMP.LANG.JAVA.PROGRAMMER X-FTN-MSGID: 1:261/38 2be7e012 X-FTN-REPLY: 1:261/38 3a6438e7 Content-Type: text/plain; charset=IBM437 Content-Transfer-Encoding: 8bit X-Gateway: time.synchro.net [Synchronet 3.16a-Win32 NewsLink 1.98] Lines: 97 Date: Thu, 09 Aug 2012 18:44:40 GMT NNTP-Posting-Host: 69.21.70.65 X-Complaints-To: news@tds.net X-Trace: newsreading01.news.tds.net 1344537880 69.21.70.65 (Thu, 09 Aug 2012 13:44:40 CDT) NNTP-Posting-Date: Thu, 09 Aug 2012 13:44:40 CDT Organization: tds.net Xref: csiph.com comp.lang.java.programmer:17544 To: Lew From: Jim Gibson In article <90ca1dd2-f3eb-49d8-882c-de7f7a8e5d42@googlegroups.com>, Lew wrote: > Mike Winter wrote: > > markspace wrote: > >> bob smith wrote: > >>> I always forget stuff like this* > >>> > >>> If I have > >>> > >>> Bitmap[] bmps = new Bitmap[256]; > >>> > >>> Are all 256 positions automatically initialized to null? > > > >> Yes. I'm sure that's in the JLS someplace. > > > > "[If] there is no array initializer, and [...] a single [array > > dimension expression] appears, a one-dimensional array is created > > of the specified length, and each component of the array is > > initialized to its default value ($4.12.5)." > > -- 15.10.1 Run-time evaluation of Array Creation Expressions > > > > "For all reference types ($4.3), the default value is null." > > -- 4.12.5 Initial Values of Variables > > > > :-) > > See? The JLS is easy to use and very authoritative, and highly useful. Not really. That extract of paragraph 15.10.1 is embedded in a long section discussing the allocation of arrays. It is statement 9 of 11 as quoted here: "15.10.1. Run-time Evaluation of Array Creation Expressions At run-time, evaluation of an array creation expression behaves as follows: If there are no dimension expressions, then there must be an array initializer. A newly allocated array will be initialized with the values provided by the array initializer as described in $10.6. The value of the array initializer becomes the value of the array creation expression. Otherwise, there is no array initializer, and: - First, the dimension expressions are evaluated, left-to-right. If any of the expression evaluations completes abruptly, the expressions to the right of it are not evaluated. - Next, the values of the dimension expressions are checked. If the value of any DimExpr expression is less than zero, then a NegativeArraySizeException is thrown. - Next, space is allocated for the new array. If there is insufficient space to allocate the array, evaluation of the array creation expression completes abruptly by throwing an OutOfMemoryError. - Then, if a single DimExpr appears, a one-dimensional array is created of the specified length, and each component of the array is initialized to its default value ($4.12.5). - Otherwise, if n DimExpr expressions appear, then array creation effectively executes a set of nested loops of depth n-1 to create the implied arrays of arrays. A multidimensional array need not have arrays of the same length at each level." From: If you think that text is easy to find and parse to figure out how array elements are initialized, then my hat is off to you. I was unable to find it by scanning the table of contents. I would have expected it to be in Section 10: Arrays > Pllptpptt! to the naysayers. Back at you. :) -- Jim Gibson --- BBBS/Li6 v4.10 Dada-1 * Origin: Prism bbs (1:261/38) --- Synchronet 3.16a-Win32 NewsLink 1.98 Time Warp of the Future BBS - telnet://time.synchro.net:24