Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!news.musoftware.de!wum.musoftware.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Jim Gibson Newsgroups: comp.lang.java.programmer Subject: Re: automatically initialized to null? Date: Wed, 08 Aug 2012 18:06:42 -0700 Lines: 91 Message-ID: <080820121806425787%jimsgibson@gmail.com> References: <286af465-25a1-4486-84ec-fe4d4adf6dd4@googlegroups.com> <90ca1dd2-f3eb-49d8-882c-de7f7a8e5d42@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: individual.net qrjSsh4FlqZzKTUy4xgUIQCRuKvpXJ3+eYJvaOlTSN6KVB7Rf0xMeqj9IV5Arm9aXT X-Orig-Path: jimsgibson Cancel-Lock: sha1:5muLh3Wegsa34NAP53f4hcFb8sI= User-Agent: Thoth/1.9.0 (Mac OS X) Xref: csiph.com comp.lang.java.programmer:17443 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