Alexey Zinger wrote: > There are quite a few optimizations with strings, for sure. Such as > replacing concatenation using "+" operator with StringBuilder and > concatenation of literals with a single literal (*). > > There's an interesting exception to that rule. The following will > work as expected: > "one " + "two " + "three" > gets turned into > "one two three" > > However, in the context of this: public String getOne() { return "one "; } > this: getOne() + "two " + "three" > will not get turned into > getOne() + "two three" If I am not mistaken the compiler can not replace that without potentially breaking the code. You method is public and non-final, which means it can be overwritten, so you need the dynamic dispatch, inlining is not ok.
The JIT might do a different thing since it knows the state of the running system. If it should optimize that call it will need to be able to revert it if a baseclass of the class you describe is loaded. If the method getOne() would be either final or private, then the compiler should theoretically be able to inline it. No idea if it would. Peter --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "The Java Posse" group. To post to this group, send email to javaposse@googlegroups.com To unsubscribe from this group, send email to javaposse+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/javaposse?hl=en -~----------~----~----~----~------~----~------~--~---