RFR: 8071571: Move substring of same string to slow path
Remi Forax
forax at univ-mlv.fr
Sat Mar 28 08:08:04 UTC 2015
On 03/27/2015 11:01 PM, Martin Buchholz wrote:
> On Fri, Mar 27, 2015 at 2:57 PM, Roger Riggs <Roger.Riggs at oracle.com> wrote:
>
>> Hi,
>>
>> @Martin: does the final have some functional reason to be present?
>> I see it just bulks up the source, reducing readability. If it is useful
>> to improve performance then fine.
>>
> If you use the idiom
> final Type foo = this.foo;
> and leave out the final,
> there is a risk of a maintainer assigning to foo and introducing a bug.
> Maybe I should stop, since no one seems to understand it?
I really dislike this style,
If you put final on foo you should also put final
on len and on all parameters because following your idea a maintainer
may introduce a bug.
At that point, you have clutter the whole code with final everywhere for
a bug that happens rarely.
This kind of bugs (modifying a field that was loaded in a local
variable) should be catch by a lint tool (or/and IDEs)
and not by asking every developers to add final (randomly).
And final on a local variable has no impact on performance because it
doesn't appear in the generated bytecode.
Historical note: final was introduce with jdk 1.1 to make explicit that
the semantics of capturing a local variable in an anonymous class was by
copying the local variable value and not by capturing the variable
itself like in Lisp (Ruby, JavaScript, etc.). Since Java 8, you don't
need to declare local variables 'final' anymore because the compiler
enforces that captured variables are effectively final.
The other problem of final is that while final on a local variables is
futile, it's a very important concept on fields, and a awful lot of Java
devs doesn't make the difference between a field and a local variable
(both are variables right ?).
And every time a discussion about final on local variable sprung, I'm
quite sure that we (and i) just add more confusion :(
regards,
Rémi
More information about the core-libs-dev
mailing list