Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Eric Sosman Newsgroups: comp.lang.java.programmer Subject: Re: Assignment or Initialization? Date: Mon, 1 Feb 2016 14:47:58 -0500 Organization: A noiseless patient Spider Lines: 41 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Mon, 1 Feb 2016 19:45:20 -0000 (UTC) Injection-Info: mx02.eternal-september.org; posting-host="2d081e2f7155c28005d4472f67c2f43d"; logging-data="11402"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/R2V8HOXbNM1DWnF05Eign" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 In-Reply-To: Cancel-Lock: sha1:PSX0a6JVXEAskSs2hx5j/+dj8sw= Xref: csiph.com comp.lang.java.programmer:33552 On 2/1/2016 2:03 PM, 4ndre4 wrote: > On 01/02/2016 12:23, Stefan Ram wrote: > > [...] >> final int i; >> i = 3; > > This is illegal. > > final int i = 3; > > is the correct form: initialization. You can't declare a final variable > and THEN assign a value to it, unless you are in a constructor, in which > case it's still an initialization. What you say is true (I think) if `i' is a class member. But it's untrue for local variables, where constructs like final boolean leftClick; switch (mouseEvent.getButton()) { case MouseEvent.BUTTON1: leftClick = true; break; case MouseEvent.BUTTON3: leftClick = false; break; default: // Unidentifiable mouse button: Ignore. return; } ... work exactly as one would expect: `leftClick' is given only one value and is thereafter immutable, but the value comes from one of two (in this case) assignment statements. Whether this is counts as an "assignment" or as an "initialization" is not something I lose sleep over. -- esosman@comcast-dot-net.invalid "Don't be afraid of work. Make work afraid of you." -- TLM