On 04/29/2014 10:58 AM, David Holmes wrote: > On 29/04/2014 7:40 PM, Andrew Haley wrote: >> On 04/28/2014 07:57 AM, David Holmes wrote: >>> On 28/04/2014 1:05 PM, Otávio Gonçalves de Santana wrote: >>>> In my opinion not, because Objects.requireNonNull is more readable than >>>> just string.toString. This way is more understandable which field is >>>> required and doesn't impact on performance. >>> >>> An invocation of requireNonNull is potentially more expensive than the >>> implicit null check that happens with foo.toString(). >> >> It's also potentially cheaper: a cbnz versus a fetch from memory with a >> few cycles pipeline delay. > > Can you elaborate please? AFAIK implicit null checks have no overhead > when the object reference is not null.
I'm sorry, that remark was too simplistic. If you have to read the data at that time, I agree. And it might do some useful prefetching. But if you're just checking the object is non-null it may be cheaper to do (o != null) . I have noticed that some Java code does (o.getClass()) or something similar to get an implicit check rather than if (o != null)... > Interpreted it is slower and the bytecode footprint is larger. > > IIRC the guidelines for use of requireNonNull in the JDK code was for > replacing explicit null checks in precondition checking, not implicit ones. > > Anyway I don't find these changes compelling. I agree. Andrew.